使用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。
谢谢。
您要求的是等效于字符0xFF的UTF-8(非常明显)。在UTF-8中,字符0xFF表示为两个字节:0xC3和0xBF。如果您不想使用UTF-8编码,请不要使用getBytes
UTF-8编码。
请记住,UTF-8不是每个字符一个字节。为了能够表示每个Unicode字符,都需要UTF-8(与所有Unicode转换一样)。这意味着UTF-8中的某些字符长一字节。其他的是两个字节长;还有一些是3个字节长,还有一些是4个字节长。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句