【发布时间】:2010-10-11 16:52:41
【问题描述】:
我正在尝试使用 PrintStream 将 0xFF 写入 java 中的文件。当我使用十六进制编辑器打开文件时,其他值被正确写入文件,但假设显示 0xFF 的值改为 0xC3BF。
使用的变量类型是int。经过几次尝试,我还发现我可以输入的“最大值”是 0x7F,这将在十六进制编辑器中正确显示,如果我输入 0x80,那么十六进制编辑器将显示 0xC280。
怎么了?
【问题讨论】:
标签: java
我正在尝试使用 PrintStream 将 0xFF 写入 java 中的文件。当我使用十六进制编辑器打开文件时,其他值被正确写入文件,但假设显示 0xFF 的值改为 0xC3BF。
使用的变量类型是int。经过几次尝试,我还发现我可以输入的“最大值”是 0x7F,这将在十六进制编辑器中正确显示,如果我输入 0x80,那么十六进制编辑器将显示 0xC280。
怎么了?
【问题讨论】:
标签: java
问题在于您正在编写字符,并且它们被编码为 UTF-8。改为写入字节。
【讨论】:
一点调查显示输出的值是 UTF-8 编码的(以下几行是 Python):
In [1]: "\xc2\x80".decode("utf-8")
Out[1]: u'\x80'
In [2]: "\xc3\xbf".decode("utf-8")
Out[2]: u'\xff'
确保为print/println/write 选择正确的重载,以便将整数值写入为字节而不是字符或字符串。请参阅documentation of PrintStream 了解所有重载。
【讨论】: