当前位置: 首页 > 面试题库 >

Java中的4字节Unicode字符

傅翰池
2023-03-14
问题内容

我正在为我的自定义StringDatatype编写单元测试,并且需要写下4字节的unicode字符。“ \ U”-不起作用(非法转义字符错误),例如:U +
1F701(0xf0 0x9f 0x9c 0x81)。如何将其写成字符串?


问题答案:

Unicode代码点不是4个字节。它是整数(目前介于U + 0000到U + 10FFFF之间)。

您的4个字节是(很自然地)其UTF-8编码版本(编辑:我是对的)。

您需要这样做:

final char[] chars = Character.toChars(0x1F701);
final String s = new String(chars);
final byte[] asBytes = s.getBytes(StandardCharsets.UTF_8);

创建Java时,Unicode并未在BMP之外定义代码点(即,U + 0000至U + FFFF),这就是a
char仅16位长的原因(好吧,这只是一个猜测,但是我认为我离这里不远了);
从那时起,它必须适应…而且BMP之外的代码点需要两个字符(一个前导代理和一个尾随代理-
Java分别将它们称为高和低代理)。Java中没有字符文字,因此不允许直接在BMP之外输入代码点。

假设a char实际上是UTF-16代码单元,并且有 这些
字符串文字,则可以在字符串中以"\uD83D\uDF01"-形式输入此“字符”,如果您的计算环境支持它,则可以直接以符号形式输入。

另请参见CharsetDecoderCharsetEncoder类。

另请参见String.codePointCount(),以及,从Java
8开始String.codePoints()(继承自CharSequence)。



 类似资料:
  • 问题内容: 我正处于从文件中读取某些数据作为字节流的过程中,并且刚刚遇到了一些不确定如何处理的unicode字符串。 每个字符使用两个字节,只有第一个看起来包含实际数据,因此,例如,字符串“ trust”在文件中的存储方式为: 通常,我只使用正则表达式将零替换为零,从而删除空格。但是,文件中单词之间的空格是使用来实现的,因此尝试执行一个简单的String’replaceAll’会使它有点混乱。 我

  • 问题内容: 我想用Java编写unicode文字U + 10428。 http://www.marathon- studios.com/unicode/U10428/Deseret_Small_Letter_Long_I 我尝试使用“ \ u10428”,但无法编译。 问题答案: 由于Java在人们认为64K足以满足所有人的需求时就采用了全面的unicode(以前在哪听过?),他们从UCS-2开始

  • 问题内容: 您能否详细说明Python中字节字符串和Unicode字符串之间的区别。我读过这个: 字节码只是将源代码转换为字节数组 这是否意味着Python具有自己的编码/编码格式?还是使用操作系统设置?我不明白 你能解释一下吗?谢谢! 问题答案: 没有python不使用自己的编码。它将使用它有权访问并指定的任何编码。中的字符代表一个unicode字符。但是,要表示256个以上的字符,单个unic

  • 问题内容: 我需要将缓冲区的长度存储在4个字节大的字节数组中。 伪代码: 做到这一点的最佳方法是什么?请记住,稍后我必须将该字节数组转换回整数。 问题答案: 您可以使用以下方式将其转换为字节: 注意,这样做时可能必须考虑字节顺序。

  • 问题内容: 我对Java有点陌生,当我将unicode字符串分配给 为什么在两种情况下结果都不同,文件a.txt也包含相同的字符串。但是当我打印文件的输出时,它会打印而不是实际的unicode字符。任何想法,如果我要归档也要作为字符串打印的内容,我该怎么做。 问题答案: 您的代码应该是正确的,但是我想文件“ a.txt”不包含用UTF-8编码的Unicode字符,而是转义的字符串“ \ u0142

  • 所以Java中的一个“char”是2个字节。(可以从这里验证。) 我有以下示例代码: 编辑2:如果我打开编码为UTF-16 BE的文件“baz.txt”,我将在文本编辑器中看到欧元字符,我想这是有意义的。