python中的字符编码

2024-05-18 15:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字节流,它看起来像“\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e”

str_data = '\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e'

str_数据使用以下代码写入文本文件

^{pr2}$

如果test_doc是在web浏览器中打开的,并且字符编码被设置为日语,它就可以正常工作了。在

我正在使用reportlab生成pdf。使用以下代码

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfgen.canvas import Canvas
from reportlab.pdfbase.cidfonts import CIDFont


pdfmetrics.registerFont(CIDFont('HeiseiMin-W3','90ms-RKSJ-H'))
pdfmetrics.registerFont(CIDFont('HeiseiKakuGo-W5','90ms-RKSJ-H'))
c = Canvas('test1.pdf')
c.setFont('HeiseiMin-W3-90ms-RKSJ-H', 6)

message1 = '\202\261\202\352\202\315\225\275\220\254\226\276\222\251\202\305\202\267\201B'

message3 = '\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88';

c.drawString(100, 675,message1)
c.save()

这里我使用message1变量,它以日语输出,我需要使用message3而不是message1来生成pdf。message3生成了garabage,可能是因为编码不正确。在


Tags: fromimportpdfreportlabxe3xe6x97xa5
3条回答

如果您需要动态检测这些编码,可以看看markpilgrim的优秀开源软件Universal Encoding Detector。在

#!/usr/bin/env python

import chardet 
message1 = '\202\261\202\352\202\315\225\275\220\254\226\276\222\251\202\305\202\267\201B'
print chardet.detect(message1)
message3 = '\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88'
print chardet.detect(message3)
str_data = '\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e'
print chardet.detect(str_data)

输出:

^{pr2}$

这里有个答案:

message1在shift_jis中编码;message3和str\u数据编码在UTF-8中。它们似乎都代表了日语文本。请参阅以下空闲会话:

>>> message1 = '\202\261\202\352\202\315\225\275\220\254\226\276\222\251\202\305\202\267\201B'
>>> print message1.decode('shift_jis')
これは平成明朝です。
>>> message3 = '\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88'
>>> print message3.decode('UTF-8')
テスト
>>>str_data = '\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e'
>>> print str_data.decode('UTF-8')
日本語
>>> 

googletranslate检测到日语,并将其分别翻译成英语“This is Heisei Mincho.”、“Test”和“Japanese”。在

问题是什么?

我想你应该学习更多关于字符串编码的知识。python中的字符串没有附加的编码信息,因此您可以用正确的方式使用它或适当地转换它。看看unicode字符串、编码/解码方法和编解码器模块。并检查c.drawString是否也允许传递unicode字符串,这可能会使您的工作更轻松。在

相关问题 更多 >

    热门问题