【问题标题】:Python 3.4 / Notepad++ 6.5 Hex Characters ReplacementPython 3.4 / Notepad++ 6.5 十六进制字符替换
【发布时间】:2014-10-31 09:39:49
【问题描述】:

我使用 Python 3.4.2 (Windows 7) 和 Notepad++ 6.5.5 (Windows 7)。

当我打开一个包含国家数据行的 file1.txt 时,一些字符以白色字体颜色显示为 xF4,并被黑色背景矩形包围。我希望 Python 用正确的字符替换那些 xF4:ô。

到目前为止,这是我想出的:

f1 = open('C:\\ABCD\\file1.txt', 'r')
f2 = open('C:\\ABCD\\file2.txt', 'w')
for line in f1:
    f2.write(line.replace('ô', 'ô'))
f1.close()
f2.close()

它没有做这项工作。看来我写“'ô'”的方式有问题。

感谢您的帮助。

【问题讨论】:

  • 您确定这个问题与 Notepad++ 表示这些字符的方式无关吗?
  • 你能给我们看看你的文件吗?
  • 如果我使用 Windows 7 记事本/写字板打开文件,ô 确实可以正确显示。但是,当我尝试将文件加载到 sql 表中时,加载过程在包含 xF4/ô 的行处停止并大喊该字符无效。

标签: python-3.x hex notepad++


【解决方案1】:

看起来是编码问题。 0xF4 确实是 Windows 1252 字符集(或 Latin1 或 iso-8859-1)中 ô 的代码

但如果 Notepad++ 配置为使用和显示 UTF8,则 不是 中的 0xF4 是一个有效的 UTF8 字符。正确的 utf8 表示是 0xC3, 0xB4。

Python 能够进行字符集转换,这就是你想要的

with open('latin.txt', 'rb') as fdin, open('utf.txt', 'wb') as fdout:
    for line in fdin:
        fdout.write(line.decode('latin1').encode('utf8'))

(为了兼容python 2和python 3,全部以二进制模式完成)

但更简单的替代方法是将 Notepad++ 配置为使用 latin1 字符集。

编辑:

正如 Fenikso 所建议的,正如你所说你使用 Python3,你也可以这样做:

with open('latin.txt', 'r', encoding='latin1') as fdin, open('utf.txt',
        'w', encoding='utf8') as fdout:
    for line in fdin:
        fdout.write(line)

【讨论】:

  • 如果f2 需要一个特定的编码,为什么不直接打开它呢?例如。 f2 = open('C:\\ABCD\\file2.txt', 'w', encoding='UTF-8').
  • @Fenikso 因为问题被标记为python 而不是python3,并且这种方式适用于两者。但你是对的,Python3 在标题中......
  • Serge:我把标签改成了python3,谢谢你的回答,对造成的混乱表示歉意。
猜你喜欢
  • 2017-05-06
  • 2018-11-12
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2018-01-31
  • 2020-06-20
  • 1970-01-01
相关资源
最近更新 更多