【问题标题】:Python - Unicode file IOPython - Unicode 文件 IO
【发布时间】:2017-04-03 18:20:16
【问题描述】:

我有一个包含一堆没有空格的 unicode 字符的单行 txt 文件

例子

????????????Ⓜ??????????????????

我想输出一个每行一个字符的txt文件

当我尝试这样做时,我认为最终会拆分 unicode 字符,我该怎么做?

【问题讨论】:

  • 你能附上你目前尝试过的代码吗?

标签: python python-unicode


【解决方案1】:

不存在包含一堆 unicode 字符的文本文件,只有在文件被读取并解码为 Python 对象后,才有意义谈论“unicode 对象”。文本文件中的数据以一种或另一种方式编码。

因此,问题在于以正确的方式读取文件,以便将字符正确解码为 un​​icode 对象。

import io
enc_source = enc_target = 'utf-8'
with io.open('my_file.txt', encoding=enc_source) as f:
    the_line = f.read().strip()
with io.open('output.txt', mode='w', encoding=enc_target) as f:
    f.writelines([c + '\n' for c in the_line])

上面我假设目标和源文件编码都是 utf-8。不一定是这种情况,您应该知道源文件是用什么编码的。你可以选择enc_target,但必须有人告诉你enc_source(文件本身不能告诉你)。

【讨论】:

  • 只是出于好奇,与codecs.open() 相比,您的方法有什么优势/不同吗?还是 codecs 是 Python 2 的东西?
  • 我只想补充一点,io.open 是更好的交叉兼容方式,codecs 是遗留的。有一些技术差异,有兴趣的可以google一下。
【解决方案2】:

这适用于 Python 3.5

line = "??"
with open("file.txt", "w", encoding="utf8") as f:
    f.write("\n".join(line))

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2021-01-22
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多