java - 为什么说:CharacterStream 类用于执行 16 位 Unicode 字符的输入/输出?
问题描述
解决方案
在 Java 中,aString
由一系列 16 位char
的 s 组成,表示以 UTF-16 编码存储的文本。
ACharset
是描述如何将 Unicode 字符转换为字节序列的对象。UTF-8 是字符集的一个示例。
一个像 的字符流Writer
,当它输出到一个包含字节的东西——一个文件,或者像一个字节输出流OutputStream
——时,使用 aCharset
将String
s 转换为简单的字节序列进行输出。(从技术上讲,它将 UTF-16 字符转换为 Unicode 字符,然后将其转换为带有 . 的字节序列Charset
。) AReader
从字节源读取时,会进行反向转换。
在 UTF-16 中,Ạ 表示为 16 位char
0x1EA1
。它在 UTF-16 中只需要 16 位,而不是 UTF-8 中的 24 位。
如果您使用 UTF-8 编码将其转换为字节,如下所示:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(baos, StandardCharsets.UTF_8);
writer.write("Ạ");
writer.close();
return baos.toByteArray();
然后您将按预期获得 3 字节序列 0xE1 0xBA 0xA1。
推荐阅读
- css - CSS如何将不同尺寸的图像与行内的文本对齐?
- python - Tensorflow对象检测,在教程中重新排列代码时列表索引超出范围错误
- git - 如何确保在推送到 repo 之前应用 Mac 上重命名目录的区分大小写?
- pandas - Pandas udf 循环遍历 PySpark 数据帧行
- visual-studio-code - 如何获取要显示的类型提示?
- swift - becomeFirstResponder 在 viewWillAppear 中不起作用
- mysql - 将十进制转换为字符串并选择所有以 .99 结尾
- c# - 在 OData4 中定义自定义字符串函数
- r - 在 R 中正确更新初始化 var 和函数排序的递归解决方案
- flutter - 如何使 SliverAppBar 的标题垂直居中?