Python 3.4 十六进制转日文字符
Python 3.4 hex to Japanese Characters
我目前正在编写一个脚本来从我的站点中提取包含日文字符的信息。到目前为止,我的脚本已将数据从站点中提取出来。
它有 return 个字符串:
"\xe5\xb9\xb4\xe3\x81\xab\xe4\xb8\x80\xe5\xba\xa6\xe3\x81\xae\xe6\x99\xb4\xe3\x82\x8c\xe5\xa7\xbf"
使用在线十六进制文本工具,我给出:
年ニ一度の晴れ椅
我知道这个短语是正确的,但我的问题是如何在 python 中转换它?当我 运行 类似:
name = "\xe5\xb9\xb4\xe3\x81\xab\xe4\xb8\x80\xe5\xba\xa6\xe3\x81\xae\xe6\x99\xb4\xe3\x82\x8c\xe5\xa7\xbf"
print(name)
我给这个:
å¹´ã«ä¸åº¦ã®æ´ãå§¿
我试过
name.decode("hex")
但是 Python 3.4 好像没有 str.decode()
,所以我尝试将它转换为字节对象并以这种方式解码,但仍然失败。
编辑 1:
如果您不介意,请跟进问题:像解决方案一样,Martijn Pieters 给出了这个作品:
name = "\xe2\x80\x9c\xe5\xa4\x8f\xe7\xa5\xad\xe3\x82\x8a\xe3\x83\x87\xe3\x83\xbc\xe3\x83\x88\xe2\x80\x9d\xe7\xb5\xa2\xe7\x80\xac \xe7\xb5\xb5\xe9\x87\x8c"
name = name.encode('latin1')
print(name.decode('Utf-8'))
但是,如果我在文件中的名称引号中包含内容,并且我这样做:
with open('0N.txt',mode='r',encoding='utf-8') as f:
name = f.read()
name = name.encode('latin1')
print(name.decode('Utf-8'))
它不起作用...有什么想法吗?
您混淆了 Python 表示 和内容。 \xhh
十六进制转义符用于 Python 字符串文字,以确保显示的值 ASCII 安全且可重现。
这里有 UTF-8 数据:
>>> name = b"\xe5\xb9\xb4\xe3\x81\xab\xe4\xb8\x80\xe5\xba\xa6\xe3\x81\xae\xe6\x99\xb4\xe3\x82\x8c\xe5\xa7\xbf"
>>> name.decode('utf8')
'\u5e74\u306b\u4e00\u5ea6\u306e\u6674\u308c\u59ff'
>>> print(name.decode('utf8'))
年に一度の晴れ姿
请注意,我在那里使用了 bytes()
字符串文字,使用 b'...'
。如果你的数据是 not a bytes
object 你有一个 Mojibake 并且需要先编码为字节:
name.encode('latin1').decode('utf8')
Latin 1 将代码点 one-on-one 映射到字节,因此在处理此类数据时通常可以安全使用。可能是您在不同的编解码器中有 Mojibake,这取决于您检索数据的方式。
如果使用 open()
从文件中读取数据,您可能指定了错误的 encoding
或依赖于您的平台默认设置。使用 open(filename, encoding='utf8')
来补救。
如果您使用 requests
库从网站加载此内容,请考虑 response.text
属性使用 latin-1
作为默认编解码器,如果 a) 该网站没有' t 指定编解码器和 b) 响应具有 text/*
mime-type。如果这是来自 HTML,通常编解码器是 HTML headers 的一部分。使用像 BeautifulSoup 这样的库来处理 HTML(使用 response.content
原始字节),它会为您检测此类信息。
如果一切都失败了,ftfy
library 可能仍然能够修复 Mojibake;它使用专门构造的编解码器来逆转常见错误。
我目前正在编写一个脚本来从我的站点中提取包含日文字符的信息。到目前为止,我的脚本已将数据从站点中提取出来。
它有 return 个字符串:
"\xe5\xb9\xb4\xe3\x81\xab\xe4\xb8\x80\xe5\xba\xa6\xe3\x81\xae\xe6\x99\xb4\xe3\x82\x8c\xe5\xa7\xbf"
使用在线十六进制文本工具,我给出:
年ニ一度の晴れ椅
我知道这个短语是正确的,但我的问题是如何在 python 中转换它?当我 运行 类似:
name = "\xe5\xb9\xb4\xe3\x81\xab\xe4\xb8\x80\xe5\xba\xa6\xe3\x81\xae\xe6\x99\xb4\xe3\x82\x8c\xe5\xa7\xbf"
print(name)
我给这个:
å¹´ã«ä¸åº¦ã®æ´ãå§¿
我试过
name.decode("hex")
但是 Python 3.4 好像没有 str.decode()
,所以我尝试将它转换为字节对象并以这种方式解码,但仍然失败。
编辑 1:
如果您不介意,请跟进问题:像解决方案一样,Martijn Pieters 给出了这个作品:
name = "\xe2\x80\x9c\xe5\xa4\x8f\xe7\xa5\xad\xe3\x82\x8a\xe3\x83\x87\xe3\x83\xbc\xe3\x83\x88\xe2\x80\x9d\xe7\xb5\xa2\xe7\x80\xac \xe7\xb5\xb5\xe9\x87\x8c"
name = name.encode('latin1')
print(name.decode('Utf-8'))
但是,如果我在文件中的名称引号中包含内容,并且我这样做:
with open('0N.txt',mode='r',encoding='utf-8') as f:
name = f.read()
name = name.encode('latin1')
print(name.decode('Utf-8'))
它不起作用...有什么想法吗?
您混淆了 Python 表示 和内容。 \xhh
十六进制转义符用于 Python 字符串文字,以确保显示的值 ASCII 安全且可重现。
这里有 UTF-8 数据:
>>> name = b"\xe5\xb9\xb4\xe3\x81\xab\xe4\xb8\x80\xe5\xba\xa6\xe3\x81\xae\xe6\x99\xb4\xe3\x82\x8c\xe5\xa7\xbf"
>>> name.decode('utf8')
'\u5e74\u306b\u4e00\u5ea6\u306e\u6674\u308c\u59ff'
>>> print(name.decode('utf8'))
年に一度の晴れ姿
请注意,我在那里使用了 bytes()
字符串文字,使用 b'...'
。如果你的数据是 not a bytes
object 你有一个 Mojibake 并且需要先编码为字节:
name.encode('latin1').decode('utf8')
Latin 1 将代码点 one-on-one 映射到字节,因此在处理此类数据时通常可以安全使用。可能是您在不同的编解码器中有 Mojibake,这取决于您检索数据的方式。
如果使用 open()
从文件中读取数据,您可能指定了错误的 encoding
或依赖于您的平台默认设置。使用 open(filename, encoding='utf8')
来补救。
如果您使用 requests
库从网站加载此内容,请考虑 response.text
属性使用 latin-1
作为默认编解码器,如果 a) 该网站没有' t 指定编解码器和 b) 响应具有 text/*
mime-type。如果这是来自 HTML,通常编解码器是 HTML headers 的一部分。使用像 BeautifulSoup 这样的库来处理 HTML(使用 response.content
原始字节),它会为您检测此类信息。
如果一切都失败了,ftfy
library 可能仍然能够修复 Mojibake;它使用专门构造的编解码器来逆转常见错误。