Java字符串UTF-8将0xFF解码为0xC3BF

时间:2014-08-22 21:25:44

标签: java string utf-8 byte

我在使用OutputStream将某些字节写入文件时遇到了一个奇怪的问题。

问题似乎是由"编码"数据。

如果我明确写入输出流

saveFile.write(new byte[]{(byte)0xFF});

它正常工作,我在我的十六进制编辑器中看到0xFF。

但是当我尝试使用字符串执行此操作时,它无法正常工作。例如:

scriptData = "some script data thats all text and stuff" + ((char)0xFF) + ((char)0x3B);
saveFile.write(scriptData.getBytes(Charset.forName("UTF-8")));

在我的十六进制编辑器中,我看到文本,然后是0xC3BF,然后是0x3B。为什么0x3B正确写入文件但0xFF变为0xC3BF?

我看到另外一个关于此的帖子,但它涉及PrintStream我没有使用AFAIK。

Problem writing 0xFF to file

感谢。

1 个答案:

答案 0 :(得分:2)

你要求UTF-8等效字符0xFF(非常明确)。 UTF-8中的字符0xFF表示为两个字节:0xC3和0xBF。如果您不想使用UTF-8编码,请不要将getBytes与UTF-8编码一起使用。

请记住,UTF-8不是每个字符的单字节编码。 UTF-8(与所有Unicode转换一样)需要能够表示每个Unicode字符。这意味着一些字符,UTF-8,长度为一个字节;其他的是两个字节长;还有一些是三个字节长,还有一些是四个字节长。