将编码错误的字符串转换为utf8

时间:2020-03-09 19:45:14

标签: python

我的这个字符串Τεστ - 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

2 个答案:

答案 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'