Python 编码转换与中文处理

python 中的 unicode是让人很困惑、比较难以理解的问题. utf-8是unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.

decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象

写python时遇到的中文编码问题:

?  /test sudo vim test.py

#!/usr/bin/python

#-*- coding:utf-8 -*-

def weather():

import time

import re

import urllib2

import itchat

#模拟浏览器

hearders = "User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"

url = "https://tianqi.moji.com/weather/china/guangdong/shantou"    ##要爬去天气预报的网址

par = '(<meta name="description" content=")(.*?)(">)'    ##正则匹配,匹配出网页内要的内容

##创建opener对象并设置为全局对象

opener = urllib2.build_opener()

opener.addheaders = [hearders]

urllib2.install_opener(opener)

##获取网页

html = urllib2.urlopen(url).read().decode("utf-8")

##提取需要爬取的内容

data = re.search(par,html).group(2)

print type(data)

data.encode('gb2312')

b = '天气预报'

print type(b)

c = b + '\n' + data

print c

weather()

?  /test sudo python test.py

<type 'unicode'>

<type 'str'>

Traceback (most recent call last):

File "test.py", line 30, in <module>

weather()

File "test.py", line 28, in weather

c = b + '\n' + data

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

解决方法:

?  /test sudo vim test.py

#!/usr/bin/python

#-*- coding:utf-8 -*-

import sys

reload(sys)

# Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入

sys.setdefaultencoding('utf-8')

def weather():

import time

import re

import urllib2

import itchat

#模拟浏览器

hearders = "User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"

url = "https://tianqi.moji.com/weather/china/guangdong/shantou"    ##要爬去天气预报的网址

par = '(<meta name="description" content=")(.*?)(">)'    ##正则匹配,匹配出网页内要的内容

##创建opener对象并设置为全局对象

opener = urllib2.build_opener()

opener.addheaders = [hearders]

urllib2.install_opener(opener)

##获取网页

html = urllib2.urlopen(url).read().decode("utf-8")

##提取需要爬取的内容

data = re.search(par,html).group(2)

print type(data)

data.encode('gb2312')

b = '天气预报'

print type(b)

c = b + '\n' + data

print c

weather()

测试后:

?  /test sudo python test.py

<type 'unicode'>

<type 'str'>

天气预报

汕头市今天实况:20度 多云,湿度:57%,东风:2级。白天:20度,多云。 夜间:晴,13度,天气偏凉了,墨迹天气建议您穿上厚些的外套或是保暖的羊毛衫,年老体弱者可以选择保暖的摇粒绒外套。

原文地址:http://blog.51cto.com/legehappy/2064622

时间: 2024-10-12 14:57:34

Python 编码转换与中文处理的相关文章

Python3的unicode编码转换成中文问题

Python3的unicode编码转换成中文问题 从别的地方搬过来的,担心以后不容易搜索到,就收集过来. 我当时面临的问题是要从C++发json代码出来,用python写了个server,然后返回给C++程序,结果收到的是:httpSvrDataCbUser: {"tranNO": "0808ad498670dc996", "data": "\u65b0A1EY16", "ver": "1.0&q

URL 编码转换 (中文-&gt;English)wiki ,Wikipedia,维基百科,PPT,PDF

wiki :URL 编码转换 (中文->English)wiki ,Wikipedia,维基百科, 1. 原始URL: https://zh.wikipedia.org/wiki/維基 2. 复制后得到的编码后的URL: https://zh.wikipedia.org/wiki/%E7%B6%AD%E5%9F%BA 1 使用微软提供的源代码,一切正常显示: PPT,pdf 1 <iframe src='https://view.officeapps.live.com/op/embed.asp

java 中文转换成Unicode编码和Unicode编码转换成中文

转自:一叶飘舟 http://blog.csdn.net/jdsjlzx/article/details/7058823 package lia.meetlucene; import java.io.IOException; import org.apache.lucene.index.CorruptIndexException; public class Unicode { public static void main(String[] args) throws CorruptIndexEx

Python开发【第三章】:Python编码转换

一.字符编码与转码 1.bytes和str 之前有学过关于bytes和str之间的转换,详细资料->bytes和str(第四字符串) 2.

python编码转换实验

Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print ord('A') 65 >>> .

python 编码转换

# -*-coding:gbk-*- python2.7  utf8 转gbk string="";解码   string_unicode=string.decode("utf-8") stirng_gbk=string_unicode.encode("gbk"); 字符串常用函数 split 分割字符串 为列表 string="a|b|"; string.split("|"),  join 连接字符串数组

Python之路3【知识点】白话Python编码和文件操作

Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View--选中Toolbar工具条 修改后的效果: 一.Python Script 模板第一行 这个很简单告诉系统用什么解释去解释,如果你直接用python python_file_name.py的话这个没什么影响可以不加. 但是如果想直接通过./python_file_name.py去运行的话就得加上!

妙用python之编码转换

转自i春秋 文章难易度:★★ 知识点:python.编码转换 前 言 在日常渗透,漏洞挖掘,甚至是CTF比赛中,会遇到各种编码,常常伴随着这些编码之间的各种转换.记得刚入门那个时候,自己处理编码转换问题往往是"百度:url解码.base64加密.hex--",或者是使用一款叫做"小葵多功能转换工具"的软件,再后来直接上Burpsuite的decoder功能,感觉用的还挺好的.不过,也遇到些问题:在线转换效率低(搜索占去了2/3的时间).两款工具存在一些小问题,比如b

Python学习之路4 - 文件操作&amp;编码转换

文件操作 文件操作大概分三步: 把文件打开. 操作文件. 把文件关上. 打开文件 打开文件用open()函数,打开成功后返回一个资源,具体语法如下. open(要打开的文件,打开方式,打开文件的格式,默认为utf-8) #例如 f = open('passengers.txt','r',encoding='utf-8') 上例用open以只读的模式打开文件,因为该文本是utf-8编码的,所以第三个参数是utf-8 w 模式是写入,是创建一个新文件的写,所以如果已经有了该文件就会被覆盖掉,注意安全