python - 如何让 python 在读写 Unicode 文本文件时更加友好?

标签 python unicode

我发现即使是现代 Python 版本(如 3.x)也无法检测文本文件上的 BOM。我想知道是否有任何模块可以通过替换用于读取和写入文本的 open()codecs.open() 函数来将此缺失的功能添加到 Python文件。

最佳答案

建议的解决方案here对我来说仍然不错(这里是该代码的修改版本,仍然在 Python 2 中,而不是 Python 3 中,并且有一个用法示例):

#!/usr/bin/python
# -*- coding: utf-8 -*-

import codecs, logging, sys
logging.basicConfig(level=logging.INFO)
bomdict = {
    codecs.BOM_UTF8 : 'UTF8',
    codecs.BOM_UTF16_BE : 'UTF-16BE',
    codecs.BOM_UTF16_LE : 'UTF-16LE' }

def read_unicode(filename):
  the_text = open(filename, 'r').read()
  for bom, encoding in bomdict.items():
      if the_text.startswith(bom):
          logging.info('BOM found, using %s', encoding)
          the_text = the_text[len(bom):]
          break
  else:
      logging.info('No BOM, using utf8')
      encoding = 'UTF8'
  return the_text.decode(encoding)

f = open('x.txt', 'wb')
f.write(codecs.BOM_UTF16_LE)
f.write(u'zeé fóo!'.encode('UTF-16LE'))
f.close()

print read_unicode('x.txt')

关于python - 如何让 python 在读写 Unicode 文本文件时更加友好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038034/

相关文章:

python - 如何在不保存到文件的情况下处理来自电报机器人的图像

python - 根据条件将字符串值替换为前一行值 - Pandas

perl - 为什么编码,然后解码字符串会使阿拉伯字符失去上下文?

c++ - 在 C++ 中读取 unicode 输入的问题

html - 我们如何在移动版 Safari 中更改 dingbat unicode 字符的颜色和大小? (html 实体)

python - 我怎么知道在 Python 中使用什么数据类型?

python - 为什么引用串联的 Pandas 数据框会返回多个条目?

python - 在 Python 脚本中打开终端并在新打开的终端中执行终端命令

php - 俄语正则表达式

php - SET NAMES 命令失败,访问被拒绝