[英]Unicode full width to standard ASCII (and back) in Python
我需要一种方法来从纯Python 2.6中转换标准ASCII和Unicode FULLWIDTH字符的字符串,反之亦然。 该字符串也可能包含符号。
我尝试过unicodedata.normalize但它没有转换符号,这是单向的。 在其他问题中找到的其他解决方案对我的程序不起作用(许多不转换符号)。
我正在尝试为PS2创建一个savefile读/写器。 例如,我从文件中读取此字符串:
'\x82g\x82\x81\x82\x8c\x82\x86\x81|\x82k\x82\x89\x82\x86\x82\x85\x82r\x82\x99\x82\x93\x82\x94\x82\x85\x82\x8d\x81@\x82c\x82\x81\x82\x94\x82\x81'
这是s-jis
-encoded,我用.decode('s-jis')
解码它:
u'\uff28\uff41\uff4c\uff46\u2212\uff2c\uff49\uff46\uff45\uff33\uff59\uff53\uff54\uff45\uff4d\u3000\uff24\uff41\uff54\uff41'
我打印出来:
Half−LifeSystem Data
这是我需要转换为ASCII的FULLWIDTH字符串; 它应该变成这样:
'Half-LifeSystem Data'
( Life
和System
之间没有任何东西)
请注意,我选择了此保存,因为它包含两个最常见的符号-
和空格。
此外,我必须能够以相同的方式对其进行重新编码,因为用户可以重命名保存,因此我必须从输入对话框中取出字符串并再次将其写入文件。
我将使用unicode.translate()
在两组之间进行映射; 角色一对一地图:
ascii_to_wide = dict((i, unichr(i + 0xfee0)) for i in range(0x21, 0x7f))
ascii_to_wide.update({0x20: u'\u3000', 0x2D: u'\u2212'}) # space and minus
wide_to_ascii = dict((i, unichr(i - 0xfee0)) for i in range(0xff01, 0xff5f))
wide_to_ascii.update({0x3000: u' ', 0x2212: u'-'}) # space and minus
wide_text.translate(wide_to_ascii)
ascii_text.translate(ascii_to_wide)
>>> wide_text.translate(wide_to_ascii)
u'Half-LifeSystem Data'
>>> wide_text.translate(wide_to_ascii).translate(ascii_to_wide)
u'\uff28\uff41\uff4c\uff46\u2212\uff2c\uff49\uff46\uff45\uff33\uff59\uff53\uff54\uff45\uff4d\u3000\uff24\uff41\uff54\uff41'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.