我正在尝试在 Python 中将十六进制写入文件,并且高于 127 的十六进制值将被替换为十六进制值 EF BF BD 的替换符号。
这是我正在使用的代码:
open('test.bin', 'wb').write(bytes([188]))
print(open('test.bin', 'rb').read())
正确的值会打印在控制台中,证明正确的值正在写入文件。一旦我打开文件,字符就会被替换字符替换。如果我下载该文件,在 Replit 中使用十六进制编辑器扩展,然后将文件中的文本复制并粘贴到在线十六进制编辑器,则会出现此行为。几乎看起来,一旦代码完成,执行 Replit 就会进行格式化。
预期的行为是符号与代码写入它们时保持相同。所写入的值(给定代码中的 188)只是我需要写入的特定值的占位符。
如有任何帮助,我们将不胜感激!
文本+一些编码=字节。
Python 确实使用 UTF-8。由于处理的原因,这里似乎也使用了 UTF-8(一种 Unicode 格式)。
因此您可以使用
..., 'w', encoding='utf8'
并执行文本的 write("¼")
:
open('test.txt', 'w', encoding='utf8').write('¼')
188 是
¼
的 Windo0ws-1252 (Windows Latin-1) 编码中的字节值。
您所做的是将文本编写为 Windows-1252,并将其读取为 UTF-8,因为它确实用 UTF-8 占位符替换了无法识别的字节序列。
请注意,编辑器必须使用 UTF-8。并且控制台可能使用其 Windows 编码或您所在的国家/地区,可能是 Windows-1252。