以下代码检索rows
中包含PDF字节流的字符串的可迭代对象。字符串row
是str
的类型。生成的文件是PDF格式,可以打开。
with open(fname, "wb") as fd:
for row in rows:
fd.write(row)
由于新的C-Library和Python实现的变化,str
变为unicode
。并且相应的内容也发生了变化,因此我的PDF文件被破坏了。
第一个row
对象的起始字节:
old row[0]: 25 50 44 46 2D 31 2E 33 0D 0A 25 E2 E3 CF D3 0D 0A ...
new row[0]: 25 50 44 46 2D 31 2E 33 0D 0A 25 C3 A2 C3 A3 C3 8F C3 93 0D 0A ...
我在这里调整相应的字节位置,看起来像unicode问题。
我认为这是一个好的开始,但我仍然有一个unicode
字符串作为输入...
>>> "\xc3\xa2".decode('utf8') # but as input I have u"\xc3\xa2"
u'\xe2'
我已经尝试了几次调用encode
和decode
所以我需要一种更加分析的方法来解决这个问题。我无法看到树木。谢谢。
当您在Python unicode字符串中找到u"\xc3\xa2"
时,通常意味着您已读取UTF-8编码的文件,因为它是Latin1编码的。所以最好的办法当然是修复初始读取。
话虽如此,如果你必须依赖破碎的代码,修复仍然很容易:你只需将字符串编码为Latin1,然后将其解码为UTF-8:
fixed_u_str = broken_u_str.encode('Latin1').decode('UTF-8')
例如:
u"\xc3\xa2\xc3\xa3".encode('Latin1').decode('utf8')
正确地给出u"\xe2\xe3"
,显示为âã
这看起来像你应该做的
fd.write(row.encode('utf-8'))
假设row
的类型现在是unicode
(这是我对你如何呈现东西的理解)。