Java String UTF-8 将 0xFF 解码为 0xC3BF

标签 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?

我还看到了另一个线程,但它涉及我没有使用 AFAIK 的 PrintStream。

Problem writing 0xFF to file

谢谢。

最佳答案

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

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

关于Java String UTF-8 将 0xFF 解码为 0xC3BF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25455760/

相关文章:

java - 如何防止用户在错误的时间和日期访问我的应用程序?

java - GridLayout 显示 2 行 `new GridLayout(22,1)`

java - Java语言规范中的位移位运算符描述

c++ - 迭代,找到

Python如何从变量的argparse中获取值,而不是变量的名称?

Python:UTF-8 十六进制到 UTF-16 十进制

encoding - 在 Sublime Text 3 中将文件编码设置为带 BOM 的 UTF8

java - 将参数发送到另一个方法

c# - 将 GUID 转换为十进制字符串(也称为以十进制为基数的逗号分隔的大整数)

gcc - 是否可以让GCC编译带有BOM的UTF-8源文件?