我的这个字符串Τεστ - Test
的编码错误。
这是文本:Τεστ - Test
,并用Western Windows-1252
重新打开并用utf-8
编码保存。
因此,现在无论何时在编辑器中打开此文件(崇高),我都需要使用编码utf-8
重新打开以读取值。
我需要使用python转换文本。 我正在尝试:
import codecs
my_text = 'Τεστ - Test'
try1 = bytes(my_text, 'utf-8')
try2 = codecs.escape_decode(my_text)[0]
try3 = str(my_text.encode('unicode_escape').decode('windows-1252'))
//try1 : b'\xc3\x8e\xc2\xa4\xc3\x8e\xc2\xb5\xc3\x8f\xc6\x92\xc3\x8f\xe2\x80\x9e - Test'
//try2 : b'\xc3\x8e\xc2\xa4\xc3\x8e\xc2\xb5\xc3\x8f\xc6\x92\xc3\x8f\xe2\x80\x9e - Test'
//try3 : \xce\xa4\xce\xb5\xcf\u0192\xcf\u201e - Test
我正在尝试转换此编码字符串,以便使用解码('utf-8')获得正确的值。
try1 = try1.decode('utf-8')
try2 = try2.decode('utf-8')
但是我再次得到Τεστ - Test
。
答案 0 :(得分:2)
以下对我有用(在Python 3中):
s = "Τεστ - Test"
assert s.encode("cp1252").decode("utf-8") == "Τεστ - Test"
因此,第一个编码调用使用cp1252
将其编码为字节字符串,然后使用utf-8
对该字节列表进行解码,从而得到预期的unicode字符串。
答案 1 :(得分:2)
您的文本是在utf-8的开头,然后以字节打开并像cp1252一样解码,然后重新编码为utf-8,因此,基本上,如果我们用python编写,它将是:
>>> "Τεστ - Test".encode('utf-8').decode('cp1252')
'Τεστ - Test'
所以逆运算是:
>>> 'Τεστ - Test'.encode('cp1252').decode('utf-8')
'Τεστ - Test'