首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否将Unicode文本写入文本文件?

是否将Unicode文本写入文本文件?
EN

Stack Overflow用户
提问于 2011-05-19 00:39:47
回答 8查看 337.7K关注 0票数 242

我正在从Google文档中提取数据,对其进行处理,并将其写入文件(最终我会将其粘贴到Wordpress页面中)。

它有一些非ASCII符号。如何才能安全地将这些转换为可以在HTML源代码中使用的符号?

目前,我正在将所有内容转换为Unicode,将它们连接到一个Python字符串中,然后执行以下操作:

代码语言:javascript
复制
import codecs
f = codecs.open('out.txt', mode="w", encoding="iso-8859-1")
f.write(all_html.encode("iso-8859-1", "replace"))

最后一行出现编码错误:

UnicodeDecodeError:'ascii‘编解码器无法解码位置12286处的字节0xa0 :序数不在范围内(128)

部分解决方案:

此Python运行时不会出现错误:

代码语言:javascript
复制
row = [unicode(x.strip()) if x is not None else u'' for x in row]
all_html = row[0] + "<br/>" + row[1]
f = open('out.txt', 'w')
f.write(all_html.encode("utf-8"))

但是如果我打开实际的文本文件,我会看到很多符号,比如:

代码语言:javascript
复制
Qur’an 

也许我需要写一些不同于文本文件的东西?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-05-19 00:49:01

通过在第一次获取对象时将其解码为unicode对象,并在输出时根据需要对其进行编码,以尽可能多地专门处理unicode对象。

如果字符串实际上是unicode对象,则需要在将其写入文件之前将其转换为unicode编码的字符串对象:

代码语言:javascript
复制
foo = u'Δ, Й, ק, ‎ م, ๗, あ, 叶, 葉, and 말.'
f = open('test', 'w')
f.write(foo.encode('utf8'))
f.close()

当您再次读取该文件时,您将获得一个unicode编码的字符串,您可以将其解码为unicode对象:

代码语言:javascript
复制
f = file('test', 'r')
print f.read().decode('utf8')
票数 337
EN

Stack Overflow用户

发布于 2016-01-29 21:49:09

在Python 2.6+中,您可以对Python 3中的默认设置(builtin open())执行use io.open()操作:

代码语言:javascript
复制
import io

with io.open(filename, 'w', encoding=character_encoding) as file:
    file.write(unicode_text)

如果您需要递增地编写文本(不需要多次调用unicode_text.encode(character_encoding) ),它可能会更方便。与codecs模块不同,io模块具有适当的通用换行符支持。

票数 80
EN

Stack Overflow用户

发布于 2017-10-15 09:01:53

Unicode字符串处理在Python3中已经标准化。

  1. char's已经以Unicode (32位)存储在memory
  2. 中,您只需打开utf-8格式的文件

(32位Unicode到可变字节长度的utf-8转换会自动从内存转换到文件。)

out1 =“(Open )”fobj = open("t1.txt","w",encoding="utf-8") fobj.write(out1) fobj.close() ()嘉南大圳ㄐㄧㄚㄋㄢ‘ㄉㄚˋㄗㄨㄣˋ

票数 65
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6048085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档