Java 怪人
上面是我的代码。Java 怪人,java,android,Java,Android,上面是我的代码。str中的特殊字符。它的长度是一,但字节是三。为什么?那么如何让它成为一个呢?如何使用java代码打印此字符?在我的android手机中,这个字符不能删除。根据文档,它是因为字符串被“编码”成字节的 使用平台的默认字符集将该字符串编码为字节序列,存储 结果生成一个新的字节数组。 当此字符串无法在默认字符集中编码时,此方法的行为未指定。 当需要对编码过程进行更多控制时,应使用CharsetEncoder类 您的特殊字符似乎是使用UTF-8编码的。UTF-8字符具有不同的字节大小,这
str
中的特殊字符。它的长度是一,但字节是三。为什么?那么如何让它成为一个呢?如何使用java代码打印此字符?在我的android手机中,这个字符不能删除。根据文档,它是因为字符串被“编码”成字节的
使用平台的默认字符集将该字符串编码为字节序列,存储
结果生成一个新的字节数组。
当此字符串无法在默认字符集中编码时,此方法的行为未指定。
当需要对编码过程进行更多控制时,应使用CharsetEncoder类 您的特殊字符似乎是使用UTF-8编码的。UTF-8字符具有不同的字节大小,这取决于它们在范围中的位置 您可以在wikipedia页面中找到算法,并查看大小是如何确定的 从Java字符串
length()
:
长度等于字符串中Unicode代码单位的数量
由于字符是使用3个字节编码的(而Unicode是一个字节),因此长度为3,而不是预期的1。- 长度不是字节
- 关于那个角色”ิ.强>
- 关于您的编码问题
您需要更改应用程序进行字符集编码的方式,并使用utf-8编码。在所有其他注释旁边。这里有一个小片段来可视化它
String str = "ิ";
System.out.println(str.length());
byte[] b = str.getBytes();
System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(b[2]);
输出
String str = "ิ"; // \u0E34
System.out.println("character length: " + str.length());
System.out.print("bytes: ");
for (byte b : str.getBytes("UTF-8")) {
System.out.append(Integer.toHexString(b & 0xFF).toUpperCase() + " ");
}
System.out.println("");
int codePoint = Character.codePointAt(str, 0);
System.out.println("unicode name of the codepoint: " + Character.getName(codePoint));
你能更详细一点吗?请阅读Unicode以及如何在编程中处理它。
character length: 1
bytes: E0 B8 B4
unicode name of the codepoint: THAI CHARACTER SARA I