python 将中文编码为特殊字符
python encoding chinese to special character
我有 scrape/curl 请求从其他网站获取 html,该网站有中文,但有些文本结果很奇怪,它显示如下:
°¢Àï°Í°ÍΪÄúÌṩÁË×ÔÁµÕß¹¤³§Ö±ÏúÆ·ÅÆµç×Ó±í ÖÇÄÜʱÉг±Á÷ŮʿÊÖ»·ÊÖÁ´Ê×ÊÎ±í´øµÈ²úÆ·£¬ÕâÀïÔÆ¼¯ÁËÖÚ¶àµÄ¹©Ó¦ÉÌ£¬²É¹ºÉÌ£¬ÖÆÔìÉÌ¡£ÓûÁ˽â¸ü¶à×ÔÁµÕß¹¤³§Ö±ÏúÆ·ÅÆµç×Ó±í ÖÇÄÜʱÉг±Á÷ŮʿÊÖ»·ÊÖÁ´Ê×ÊÎ±í´øÐÅÏ¢£¬Çë·ÃÎʰ¢Àï°Í°ÍÅú·¢Íø£¡
应该是中文的,这是我的代码:
str(result.decode('ISO-8859-1'))
如果没有decode 'ISO-8859-1'(只有return result变量)会显示这样的问号:
����Ͱ�Ϊ���ṩ�������߹���ֱ��Ʒ�Ƶ��ӱ� ����ʱ�г���Ůʿ�ֻ��������α����Ȳ�Ʒ�������Ƽ����ڶ�Ĺ�Ӧ�̣��ɹ��̣������̡����˽���������߹���ֱ��Ʒ�Ƶ��ӱ� ����ʱ�г���Ůʿ�ֻ��������α�����Ϣ������ʰ���Ͱ���������
你能帮我看看我应该用哪个 encode/decode 吗?
谢谢
中文有几种可能的字符集。
3种常见的中文字符集是:gb2312、big5和gbk。
这是从 gb2312
转换为 utf-8
.
的片段
import codecs
infile = codecs.open("in.txt", "r", "gb2312")
lines = infile.readline()
infile.close()
print(lines)
outfile = codecs.open("out.txt", "wb", "utf-8")
outfile.writelines(lines)
outfile.close()
试试这个代码块。
您可以导入 unquote
文件并使用 latin1
编码机制对内容进行编码。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from urllib2 import unquote
bytesquoted = u'å%8f°å%8d%97 親å%90é¤%90廳'.encode('latin1')
unquoted = unquote(bytesquoted)
print unquoted.decode('utf8')
输出:
台南亲子餐厅
正如@Thu Yein tun 所提到的,这是一个非常简单的解决方案,查看内容类型的 http 请求 link 的 header 响应,我显示为 text/html;字符集=GBK,
然后我像这样给出我的代码的解决方案
result.decode('gbk')
我有 scrape/curl 请求从其他网站获取 html,该网站有中文,但有些文本结果很奇怪,它显示如下:
°¢Àï°Í°ÍΪÄúÌṩÁË×ÔÁµÕß¹¤³§Ö±ÏúÆ·ÅÆµç×Ó±í ÖÇÄÜʱÉг±Á÷ŮʿÊÖ»·ÊÖÁ´Ê×ÊÎ±í´øµÈ²úÆ·£¬ÕâÀïÔÆ¼¯ÁËÖÚ¶àµÄ¹©Ó¦ÉÌ£¬²É¹ºÉÌ£¬ÖÆÔìÉÌ¡£ÓûÁ˽â¸ü¶à×ÔÁµÕß¹¤³§Ö±ÏúÆ·ÅÆµç×Ó±í ÖÇÄÜʱÉг±Á÷ŮʿÊÖ»·ÊÖÁ´Ê×ÊÎ±í´øÐÅÏ¢£¬Çë·ÃÎʰ¢Àï°Í°ÍÅú·¢Íø£¡
应该是中文的,这是我的代码:
str(result.decode('ISO-8859-1'))
如果没有decode 'ISO-8859-1'(只有return result变量)会显示这样的问号:
����Ͱ�Ϊ���ṩ�������߹���ֱ��Ʒ�Ƶ��ӱ� ����ʱ�г���Ůʿ�ֻ��������α����Ȳ�Ʒ�������Ƽ����ڶ�Ĺ�Ӧ�̣��ɹ��̣������̡����˽���������߹���ֱ��Ʒ�Ƶ��ӱ� ����ʱ�г���Ůʿ�ֻ��������α�����Ϣ������ʰ���Ͱ���������
你能帮我看看我应该用哪个 encode/decode 吗?
谢谢
中文有几种可能的字符集。
3种常见的中文字符集是:gb2312、big5和gbk。
这是从 gb2312
转换为 utf-8
.
import codecs
infile = codecs.open("in.txt", "r", "gb2312")
lines = infile.readline()
infile.close()
print(lines)
outfile = codecs.open("out.txt", "wb", "utf-8")
outfile.writelines(lines)
outfile.close()
试试这个代码块。
您可以导入 unquote
文件并使用 latin1
编码机制对内容进行编码。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from urllib2 import unquote
bytesquoted = u'å%8f°å%8d%97 親å%90é¤%90廳'.encode('latin1')
unquoted = unquote(bytesquoted)
print unquoted.decode('utf8')
输出:
台南亲子餐厅
正如@Thu Yein tun 所提到的,这是一个非常简单的解决方案,查看内容类型的 http 请求 link 的 header 响应,我显示为 text/html;字符集=GBK, 然后我像这样给出我的代码的解决方案
result.decode('gbk')