我的文件中的行采用 unicode 编码,例如 D\u00f3nde est\u00e1s。 我想检查每个单词是否仅包含来自设置语言环境的字符。
这段代码并不完全有效。该字符串似乎已正确转换为 Dónde estás 并且 wordmatch 匹配每个单词,但它不考虑语言环境设置。例如。如果我将语言环境设置为 en_US,即使它们包含 ó 和 á 字符,它仍然会匹配这两个词。
使用 re.LOCALE 而不是 re.UNICODE 似乎也不起作用,两个词不再匹配 wordmatch 正则表达式。
import re
import locale
locale.setlocale(locale.LC_ALL,'en_ES')
wordmatch=re.compile(r'^\w*$',re.UNICODE)
line="D\u00f3nde est\u00e1s"
line=line.decode('unicode_escape')
for word in line.split():
if wordmatch.match(word):
print "Matched "+word
else:
print "No match "+word
请您参考如下方法:
更改区域设置并不直接意味着更改编码,en_US 的编码也不是强制性的ascii。例如,在我的系统上,它是 iso-8859-1,这是一种 ó 和 á 有效的编码。这可以解释为什么 re.LOCALE 不提示这些字符。
要操作编码,我宁愿使用 encode 函数也不愿使用正则表达式:
line="D\u00f3nde est\u00e1s"
line=line.decode('unicode_escape')
# get current encoding, or set to "ascii" if you want to be more restrictive
pref_encoding = locale.getpreferedencoding()
for word in line.split():
try:
w = word.encode(pref_encoding)
except UnicodeEncodeError as e:
print "This word contains unacceptable characters: ", word
break
