开发者问题收集

将 Unicode 文本写入文本文件?

2011-05-18
398861

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

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

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

import codecs
f = codecs.open('out.txt', mode="w", encoding="iso-8859-1")
f.write(all_html.encode("iso-8859-1", "replace"))

最后一行有一个编码错误:

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

部分解决方案:

此 Python 运行时没有错误:

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"))

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

Qur’an 

也许我需要写入文本文件以外的其他文件?

3个回答

尽可能只处理 unicode 对象,即在首次获取对象时将其解码为 un​​icode 对象,并在输出时根据需要对其进行编码。

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

foo = u'Δ, Й, ק, ‎ م, ๗, あ, 叶, 葉, and 말.'
f = open('test', 'w')
f.write(foo.encode('utf8'))
f.close()

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

f = file('test', 'r')
print f.read().decode('utf8')
quasistoic
2011-05-18

Unicode 字符串处理已在 Python 3 中标准化。

  1. char 已以 Unicode(32 位)存储在内存中
  2. 您只需以 utf-8 打开文件
    (从内存到文件,32 位 Unicode 到可变字节长度 utf-8 的转换会自动执行。)

    out1 = "(嘉南大埔 ㄐㄧㄚ ㄋㄢˊ ㄉㄚˋ ㄗㄨㄣˋ )"
    fobj = open("t1.txt", "w", encoding="utf-8")
    fobj.write(out1)
    fobj.close()
    
david m lee
2017-10-15

在 Python 2.6+ 中,您可以 使用默认的 io.open() (在 Python 3 上为 内置的 open() ):

import io

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

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

jfs
2016-01-29