gpt4 book ai didi

python - Python 中标准 ASCII(和背面)的 Unicode 全角

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:30 26 4
gpt4 key购买 nike

我需要一种方法来将字符串从标准 ASCII 和 Unicode FULLWIDTH 字符转换为纯 Python 2.6 中的字符串,反之亦然。该字符串还可能包含符号。

我试过 unicodedata.normalize 但它不转换符号,而且是单向的。在其他问题中找到的其他解决方案不适用于我的程序(许多不转换符号)。

我正在尝试为 PS2 创建一个保存文件读取器/写入器。例如,我从文件中读取了这个字符串:

'\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 编码的,我用 .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'

(LifeSystem 之间没有任何东西)

请注意,我选择此保存是因为它包含两个最常见的符号,- 和空格。

另外,我必须能够像以前一样重新编码它,因为用户可能会重命名保存,所以我必须从输入对话框中取出字符串并将其再次写入文件。

最佳答案

我会使用 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'

关于python - Python 中标准 ASCII(和背面)的 Unicode 全角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com