【发布时间】:2020-08-28 16:22:28
【问题描述】:
我从 php 7 程序中获取一个字符串,并在 Python 3.7.2 中处理它。
my_str = 'ü'
print(type(my_str))
str_list = list(my_str)
for letter in str_list:
print('letter',letter)
if 'ü' in my_str:
print('we have the umlaut')
else:
print('we have no umlaut')
这是输出:
<class 'str'>
letter u
letter ̈
we have no umlaut
为什么字母 u 与变音符号分开?如果我在此字符串中键入 ü,它会被读取为 'ü',并且对 'ü' 的测试成功。如何更正此字符串,使其具有 ü 而不是两个单独的字符?
提前感谢您提供的任何提示。我已经搜索过这个并没有发现任何有用的信息。
【问题讨论】:
-
欢迎来到非间距 unicode 字符的世界!它是COMBINING DIAERESIS
-
您可以像stackoverflow.com/questions/16467479/normalizing-unicode 一样规范化字符串。
'ü' in unicodedata.normalize('NFC', my_str)是True。 -
对于遇到此类 unicode 问题的其他人,我得到了十六进制字符序数 -
hex(ord(my_str[1]))然后在互联网上搜索“unicode U+0308”以获取有关该字符的详细信息。 -
这是一个很好的问题。我们中有多少人在使用之前对我们的 unicode 数据进行规范化?手? (我承认,我没有)。但它是一个微妙的错误来源。
-
@tdelaney 还有
unicodedata.name(my_str[1])
标签: python character-encoding diacritics