如何修复坏解码?
how to fix bad decoding?
我正在使用下面所示的程序来编写(从网络中获取)人员数据列表。
我认为代码本身没问题,但我对结果感到困惑。有些字符被正确解码,有些则没有。例如:
STANIS?AWurodzony/a 01.01.1888, ?Ԅ?
HALINAurodzony/a 05.07.1927, ŁÓDŹ
两个字符串的最后一个字是一样的!
还 ?用于替换不可翻译字符的符号一次使用一次不:
STANISŁAWurodzony/a 24.03.1907, RAKSZANY
^
| here is written ok - not replaced
这是代码:
def findPerson():
file = codecs.open('Names.txt','a','ISO-8859-1','replace')
try:
with codecs.open('./listNames_links.txt','r','ISO-8859-1','replace') as f:
line = f.readline()
while line != '':
#print line,
line = f.readline()
res = requests.get('http://real.address.gov.pl'+line)
res.raise_for_status()
soup = BeautifulSoup(res.text)
linkElems = soup.find('a','css_class_name').text
file.write(linkElems)
file.write('\r\n')#preserve end-of-line
问题:
如何解决这个问题。我的程序错了吗?或者源页面的编码有问题? (我想没问题,我可以在浏览器中阅读它没有任何错误。)
这看起来像波兰语,而且看起来不像使用 multi-byte 编码,例如 UTF-8
。您正在使用不支持所有波兰语字符的 ISO-8859-1
写入 Names.txt
文件。
您可以使用 ISO-8859-2
来支持波兰语字符,但更好的方法是使用 UTF-8
,它支持所有语言并且是网络上的通用标准。
尝试
file = codecs.open('Names.txt','a','UTF-8','replace')
当您使用 Requests 发出请求时,请尝试检查每个页面的编码。例如:
res = requests.get('http://real.address.gov.pl'+line)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text)
我对 python 不是很熟悉,但对 java 程序也有类似的问题。在几乎所有情况下,问题是所有步骤都使用了不同的编码,因此在转换时会导致难看的字符。
如果可能,我建议在整个过程中使用 UTF-8。
一个 off-topic 旁注:因为我经常偶然发现这个,所以我自己买了 this T-Shirt(正确拼写 Scheiß,德语 废话) 工作时穿它 ;-)
我正在使用下面所示的程序来编写(从网络中获取)人员数据列表。 我认为代码本身没问题,但我对结果感到困惑。有些字符被正确解码,有些则没有。例如:
STANIS?AWurodzony/a 01.01.1888, ?Ԅ?
HALINAurodzony/a 05.07.1927, ŁÓDŹ
两个字符串的最后一个字是一样的! 还 ?用于替换不可翻译字符的符号一次使用一次不:
STANISŁAWurodzony/a 24.03.1907, RAKSZANY
^
| here is written ok - not replaced
这是代码:
def findPerson():
file = codecs.open('Names.txt','a','ISO-8859-1','replace')
try:
with codecs.open('./listNames_links.txt','r','ISO-8859-1','replace') as f:
line = f.readline()
while line != '':
#print line,
line = f.readline()
res = requests.get('http://real.address.gov.pl'+line)
res.raise_for_status()
soup = BeautifulSoup(res.text)
linkElems = soup.find('a','css_class_name').text
file.write(linkElems)
file.write('\r\n')#preserve end-of-line
问题: 如何解决这个问题。我的程序错了吗?或者源页面的编码有问题? (我想没问题,我可以在浏览器中阅读它没有任何错误。)
这看起来像波兰语,而且看起来不像使用 multi-byte 编码,例如 UTF-8
。您正在使用不支持所有波兰语字符的 ISO-8859-1
写入 Names.txt
文件。
您可以使用 ISO-8859-2
来支持波兰语字符,但更好的方法是使用 UTF-8
,它支持所有语言并且是网络上的通用标准。
尝试
file = codecs.open('Names.txt','a','UTF-8','replace')
当您使用 Requests 发出请求时,请尝试检查每个页面的编码。例如:
res = requests.get('http://real.address.gov.pl'+line)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text)
我对 python 不是很熟悉,但对 java 程序也有类似的问题。在几乎所有情况下,问题是所有步骤都使用了不同的编码,因此在转换时会导致难看的字符。
如果可能,我建议在整个过程中使用 UTF-8。
一个 off-topic 旁注:因为我经常偶然发现这个,所以我自己买了 this T-Shirt(正确拼写 Scheiß,德语 废话) 工作时穿它 ;-)