Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检测字符串是否已被utf8编码?_Python_Python 2.7_Character Encoding_Mojibake - Fatal编程技术网

Python 如何检测字符串是否已被utf8编码?

Python 如何检测字符串是否已被utf8编码?,python,python-2.7,character-encoding,mojibake,Python,Python 2.7,Character Encoding,Mojibake,我有一些字符串如下: u'Thaïlande' 这是“Thaïlande”,我不知道它是如何编码的,但我需要把它带回“Thaïlande”,然后URL编码它 有没有办法猜测一个字符串是否已经用Python2编码过?您有所谓的。您可以使用统计分析来查看在UTF-8字节的典型组合中是否存在数量异常的拉丁-1字符,或者是否存在任何CP1252特定字符 已经有一个软件包可以为您执行此操作,并在检测到Mojibake时修复损坏:: ftfy的目标是接收坏的Unicode并输出好的Unicode,以便

我有一些字符串如下:

u'Thaïlande'
这是“Thaïlande”,我不知道它是如何编码的,但我需要把它带回“Thaïlande”,然后URL编码它

有没有办法猜测一个字符串是否已经用Python2编码过?

您有所谓的。您可以使用统计分析来查看在UTF-8字节的典型组合中是否存在数量异常的拉丁-1字符,或者是否存在任何CP1252特定字符

已经有一个软件包可以为您执行此操作,并在检测到Mojibake时修复损坏::

ftfy的目标是接收坏的Unicode并输出好的Unicode,以便在支持Unicode的代码中使用

fix_encoding()函数将查找mojibake的证据,如果可能的话,它将撤消生成该证据的过程,以返回应该存在的文本

这听起来不可能吗?真的不是。UTF-8是一种设计良好的编码,当它被误用时,它会变得很明显,而mojibake字符串通常包含恢复原始字符串所需的所有信息

你有一个所谓的。您可以使用统计分析来查看在UTF-8字节的典型组合中是否存在数量异常的拉丁-1字符,或者是否存在任何CP1252特定字符

已经有一个软件包可以为您执行此操作,并在检测到Mojibake时修复损坏::

ftfy的目标是接收坏的Unicode并输出好的Unicode,以便在支持Unicode的代码中使用

fix_encoding()函数将查找mojibake的证据,如果可能的话,它将撤消生成该证据的过程,以返回应该存在的文本

这听起来不可能吗?真的不是。UTF-8是一种设计良好的编码,当它被误用时,它会变得很明显,而mojibake字符串通常包含恢复原始字符串所需的所有信息


你的样品不完整。请提供实际错误字符串的
repr()
输出。您缺少一些不可打印的字节。您的示例不完整。请提供实际错误字符串的
repr()
输出。您缺少了一些不可打印的字节。我已经指出了我的问题:如果您查看urllib
def unquote(s):
的源代码,您将看到
append(unquote(str(bits[I])).decode('latin1'))
是“latin1”,而我的代码是utf-8。我不知道为什么我是唯一一个有这个问题,但我将不得不重新编写自己的GET参数处理。。。似乎
unquote()
有缺陷。我看到@OlivierPons:这只适用于传入unicode字符串的情况。如果你有UTF-8字节,就不要传入Unicode字符串。@OlivierPons:虽然我同意
urlib.unquote()
urlparse.unquote()
函数在这种行为中基本上是不正确的,但解决办法是确保传入ASCII字节:
unquote(unicodest.encode('ASCII')).decode('utf8')
,在这里,我假设条目已经正确地进行了URL编码(这意味着它也是ASCII安全的)。你让我高兴极了!我不得不复制粘贴
parse_qsl
,这是错误的(也是python27核心的一部分),因为它确实
unquote(nv[1]。replace(+','')
,而它应该这样做-如果我错了请纠正-
unquote(nv[1]。encode('ascii')。replace('+','')
您将已经编码为ascii的URL传递给
parse_qsl()
。我已经指出了我的问题:如果您查看urllib
def unquote(s):
的源代码,您将看到
append(unquote(str(bits[I])).decode('latin1'))
是“latin1”,而我的代码是utf-8。我不知道为什么我是唯一一个有这个问题,但我将不得不重新编写自己的GET参数处理。。。似乎
unquote()
有缺陷。我看到@OlivierPons:这只适用于传入unicode字符串的情况。如果你有UTF-8字节,就不要传入Unicode字符串。@OlivierPons:虽然我同意
urlib.unquote()
urlparse.unquote()
函数在这种行为中基本上是不正确的,但解决办法是确保传入ASCII字节:
unquote(unicodest.encode('ASCII')).decode('utf8')
,在这里,我假设条目已经正确地进行了URL编码(这意味着它也是ASCII安全的)。你让我高兴极了!我不得不复制粘贴
parseqsl
,这是一个错误(也是python27核心的一部分),因为它确实
unquote(nv[1]。replace(+','')
,而它应该这样做-如果我错了,请更正-
unquote(nv[1]。encode('ascii')。replace('+','')
您将已经编码为ascii的URL传递到
parseqsl()