将 "literal" unicode 字符转换为等效字符而不强调
Converting "literal" unicode character to an equivalent without emphasising
我输入了一个包含“文字”unicode 字符的字符串。
"I want to replace \u00c6 with AE and \u00d5 with O"
注意:
\u00c6 = Æ
\u00d5 = Ö
因此,使用我的 python 脚本,我可以轻松替换一个字符:
>>> print("I want to replace \u00c6 with AE and \u00d5 with O".replace(u"\u00c6","AE"))
I want to replace AE with AE and Õ with O
但是如果我想全部替换怎么办? (示例中只有2个,但我们可以想象我们必须搜索50个字符才能替换。
我试过用字典来匹配,但是好像不行
#input : "\u00c0 \u00c1 \u00c2 \u00d2 \u00c4 \u00c5 \u00c6 \u00d6"
#output (expected) : "A A A O A A AE 0"
import sys
unicode_table = {
'\u00c0': 'A', #À
'\u00c1': 'A', #Á
'\u00c2': 'A', #Â
'\u00c3': 'A', #Ã
'\u00c4': 'A', #Ä
'\u00c5': 'A', #Å
'\u00c6': 'AE', #Æ
'\u00d2': 'O', #Ò
'\u00d3': 'O', #Ó
'\u00d4': 'O', #Ô
'\u00d5': 'O', #Õ
'\u00d6': 'O' #Ö
#this may go on much further
}
result = sys.argv[1]
for key in unicode_table:
#print(key + unicode_table[key])
result = result.replace(key,unicode_table[key])
print(result)
输出:
[puppet@damageinc python]$ python replace_unicode.py "\u00c0 \u00c1 \u00c2 \u00d2 \u00c4 \u00c5 \u00c6 \u00d6"
\u00c0 \u00c1 \u00c2 \u00d2 \u00c4 \u00c5 \u00c6 \u00d6
感谢任何帮助!
谢谢。
编辑:两个带有评论的解决方案,谢谢
1st:用 unicode_escape 重新编码字符串:
result = sys.argv[1].encode().decode('unicode_escape')
第二:使用模块unidecode,只是为了避免重新发现轮子
import sys
from unidecode import unidecode
result = sys.argv[1].encode().decode('unicode_escape')
print(unidecode(result))
您的 Python 代码按预期工作,是您的 shell 没有呈现转义序列,即 Python 脚本按字面意思接收“\u00c0”而不是“À” "等
您应该尝试使用一些实际的 unicode 字符串对其进行测试,或者通过添加例如调整您的命令printf
或 echo -e
在将转义序列传递给脚本之前呈现转义序列:
python replace_unicode.py "$(printf '\u00c0 ... \u00d6')"
我输入了一个包含“文字”unicode 字符的字符串。
"I want to replace \u00c6 with AE and \u00d5 with O"
注意: \u00c6 = Æ \u00d5 = Ö
因此,使用我的 python 脚本,我可以轻松替换一个字符:
>>> print("I want to replace \u00c6 with AE and \u00d5 with O".replace(u"\u00c6","AE"))
I want to replace AE with AE and Õ with O
但是如果我想全部替换怎么办? (示例中只有2个,但我们可以想象我们必须搜索50个字符才能替换。
我试过用字典来匹配,但是好像不行
#input : "\u00c0 \u00c1 \u00c2 \u00d2 \u00c4 \u00c5 \u00c6 \u00d6"
#output (expected) : "A A A O A A AE 0"
import sys
unicode_table = {
'\u00c0': 'A', #À
'\u00c1': 'A', #Á
'\u00c2': 'A', #Â
'\u00c3': 'A', #Ã
'\u00c4': 'A', #Ä
'\u00c5': 'A', #Å
'\u00c6': 'AE', #Æ
'\u00d2': 'O', #Ò
'\u00d3': 'O', #Ó
'\u00d4': 'O', #Ô
'\u00d5': 'O', #Õ
'\u00d6': 'O' #Ö
#this may go on much further
}
result = sys.argv[1]
for key in unicode_table:
#print(key + unicode_table[key])
result = result.replace(key,unicode_table[key])
print(result)
输出:
[puppet@damageinc python]$ python replace_unicode.py "\u00c0 \u00c1 \u00c2 \u00d2 \u00c4 \u00c5 \u00c6 \u00d6"
\u00c0 \u00c1 \u00c2 \u00d2 \u00c4 \u00c5 \u00c6 \u00d6
感谢任何帮助! 谢谢。
编辑:两个带有评论的解决方案,谢谢
1st:用 unicode_escape 重新编码字符串:
result = sys.argv[1].encode().decode('unicode_escape')
第二:使用模块unidecode,只是为了避免重新发现轮子
import sys
from unidecode import unidecode
result = sys.argv[1].encode().decode('unicode_escape')
print(unidecode(result))
您的 Python 代码按预期工作,是您的 shell 没有呈现转义序列,即 Python 脚本按字面意思接收“\u00c0”而不是“À” "等
您应该尝试使用一些实际的 unicode 字符串对其进行测试,或者通过添加例如调整您的命令printf
或 echo -e
在将转义序列传递给脚本之前呈现转义序列:
python replace_unicode.py "$(printf '\u00c0 ... \u00d6')"