加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python(2.6)cStringIO unicode支持?

发布时间:2020-12-20 13:30:30 所属栏目:Python 来源:网络整理
导读:我正在使用 python pycurl模块从各种网页下载内容.因为我也想支持潜在的unicode文本,所以我一直在避免使用cStringIO.StringIO函数,根据python docs: cStringIO – Faster version of StringIO Unlike the StringIO module,this module is not able to accep
我正在使用 python pycurl模块从各种网页下载内容.因为我也想支持潜在的unicode文本,所以我一直在避免使用cStringIO.StringIO函数,根据python docs: cStringIO – Faster version of StringIO

Unlike the StringIO module,this module is not able to accept Unicode strings that cannot be encoded as plain ASCII strings.

…不支持unicode字符串.实际上它声明它不支持无法转换为ASCII字符串的unicode字符串.有人可以向我澄清一下吗?哪个可以和哪个不能转换?

我已经使用以下代码进行了测试,它似乎与unicode一起工作正常:

import pycurl
import cStringIO

downloadedContent = cStringIO.StringIO()
curlHandle = pycurl.Curl()
curlHandle.setopt(pycurl.WRITEFUNCTION,downloadedContent.write)
curlHandle.setopt(pycurl.URL,'http://www.ltg.ed.ac.uk/~richard/unicode-sample.html')

curlHandle.perform()
content = downloadedContent.getvalue()

fileHandle = open('unicode-test.txt','w')
for char in content:
    fileHandle.write(char)

并且文件正确写入.我甚至可以在控制台中打印整个内容,所有字符都显示得很好……所以我很困惑的是,cStringIO在哪里失败?我有什么理由不使用它吗?

[注意:我使用的是Python 2.6并且需要坚持这个版本]

解决方法

任何仅使用ASCII代码点(字节值00-7F十六进制)的文本都可以转换为ASCII.基本上任何使用美国英语中不常用的字符的文本都不是ASCII.

在您的示例代码中,您没有将输入转换为Unicode文本;你将它视为未解码的字节.有问题的测试页面以UTF-8编码,您永远不会将其解码为Unicode.

如果要将值解码为Unicode字符串,则无法将该字符串存储在cStringIO对象中.

您可能想要了解Unicode和文本编码(如ASCII和UTF-8)之间的区别.我可以推荐:

> Joel Spolsky的minimum Unicode article
> Python Unicode HOWTO.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读