【发布时间】:2014-11-06 05:10:04
【问题描述】:
我必须检查以双字节字符编码的日语字符串(这些文件自然不是 Unicode,我必须将它们保存在 Shift-JIS 中)。其中许多字符串包含的数字也是双字节字符(123456789),而不是标准的单字节数字(0-9)。因此,搜索数字的常用方法将不起作用(例如在正则表达式中使用 [0-9] 或 \d)。
我发现使其工作的唯一方法是创建一个元组并遍历字符串中的元组以查找匹配项,但有更有效的方法吗?
这是我在搜索双字节数时得到的输出示例:
>>> s = "234" # "2" is a double-byte integer
>>> if u"2" in s:
print "y"
>>> if u"2" in s:
print "y"
y
>>> print s[0]
>>> print s[:2]
2
>>> print s[:3]
23
任何建议将不胜感激!
【问题讨论】:
-
将字符串转换为 unicode,使用 unicode 正则表达式搜索,对字符串执行任何操作,转换回 shift-jis...
-
就像@isedev 已经说过的那样,确保您始终在 Python 中使用 unicode(而不是 UTF8/16)。然后,您可以使用
unicodedata模块为您提供有关字符的信息,例如:unicodedata.numeric(u'1')=>1.0或unicodedata.name(u'1')=>'FULLWIDTH DIGIT ONE'或unicodedata.digit(u'1')=>1 -
我之前尝试过,但收效甚微。所有 Shift-JIS 都可以转换为 Unicode,但反之则不行。我会再试一次。
-
@Tensigh 我认为您混淆了 Unicode 和 UTF 编码。你不能将 Unicode 从 Python(或任何语言)输出到文件、网络、STDOUT 等。你只能输出一个字节串,它需要用像 UTF-8 这样的编码进行编码。
-
@LukasGraf,谢谢,这是一个很好的解释。
标签: python regex character-encoding python-2.x digits