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

Java对String的内部表示是什么?修改过的UTF-8?UTF-16?

昝浩阔
2023-03-14
问题内容

我在Java的内部表示形式中搜索String,但是我得到了两种看上去可靠但不一致的资料。

一种是:

http://www.codeguru.com/cpp/misc/misc/multi-lingualsupport/article.php/c10451

它说:

Java将UTF-16用于内部文本表示,并支持对字符串序列化UTF-8的非标准修改。

另一个是:

http://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8

它说:

Tcl还使用与Java相同的修改后的UTF-8 [25]作为Unicode数据的内部表示形式,但对外部数据使用严格的CESU-8。

修改过的UTF-8?还是UTF-16?哪一个是正确的?Java将多少字节用于内存中的char?

请让我知道哪个是正确的,以及它使用了多少字节。


问题答案:

Java使用UTF-16作为内部文本表示形式

Java中String和StringBuilder等的表示形式是UTF-16

https://docs.oracle.com/javase/8/docs/technotes/guides/intl/overview.html

Java平台中的文本如何表示?

Java编程语言基于Unicode字符集,并且一些库实现Unicode标准。Java编程语言中的原始数据类型char是一个无符号的16位整数,可以表示U + 0000到U + FFFF范围内的Unicode代码点或UTF-16的代码单元。Java平台中表示字符序列的各种类型和类-char [],java.lang.CharSequence的实现(例如String类)和java.text.CharacterIterator的实现都是UTF-16序列。

在JVM级别上,如果您正在使用-XX:+UseCompressedStrings(对于Java 6的某些更新是默认设置),则实际的内存中表示可以是8位,ISO-8859-1,但仅适用于不需要UTF-16编码的字符串。

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

并支持对字符串序列化的UTF-8的非标准修改。

默认情况下,序列化字符串使用UTF-8。

Java将多少字节用于内存中的char?

char如果忽略对象中填充的需要,则A 始终为两个字节。

注意:一个代码点(允许字符> 65535)可以使用一个或两个字符,即2或4个字节。



 类似资料:
  • 问题内容: 说“ Java修改的UTF-8编码”是什么意思?与普通的UTF-8编码有何不同? 问题答案: 这在以下内容的javadoc中进行了详细说明: 修改后的UTF-8 和接口的实现以略微修改UTF-8的格式表示Unicode字符串。(有关标准UTF-8格式的信息,请参见 Unicode标准版本4.0的3.9 Unicode编码形式 )。请注意,在下表中,最高有效位出现在最左侧的列中。 …(某

  • 问题内容: 在ICU项目(也现在有一个PHP库)中包含有需要帮助恢复正常UTF-8串类,使搜索时更容易地比较值。 但是,我试图弄清楚这对应用程序意味着什么。例如,在哪种情况下,我想要“规范对等”而不是“兼容性对等”,反之亦然? 问题答案: 规范化归一化 Unicode包括多种编码某些字符(最著名的是重音字符)的方法。规范化规范将代码点更改为规范编码形式。生成的代码点应与原始代码点相同,除非字体或渲

  • 问题内容: 最近,我们将应用程序从JDK 7迁移到了JDK8。更改之后,我们遇到了以下代码段的问题。 字节数组可能包含无效的UTF-8字节序列。UTF-8解码时,相同的字节数组在Java 7和Java 8上产生两个不同的字符串。 根据此SO帖子的答案,Java 8“修复”了Java7中的错误,并用替换字符串替换了无效的UTF-8字节序列,该字符串符合UTF-8规范。 但是我们想坚持使用Java 7

  • 问题内容: 我有以下代码,我想使输出流使用utf-8。基本上我有这样的字符,所以看起来像是编码问题。 我看过很多使用…的例子 我当前的代码是… 是否可以在不必使用OutputStreamWriter的情况下将此对象定义为UTF-8? 谢谢, 问题答案: 否。您不能指定编码,这非常烦人。它始终使用系统默认编码。只是吸起来,并使用包装一个。当然,您仍然可以将OutputStreamWriter包装在B

  • 问题内容: 我正在修复一些错误的UTF-8编码。我目前正在使用PHP 5和MySQL。 在我的数据库中,我有一些编码错误的实例,例如:ƒ 数据库整理是utf8_general_ci PHP使用的是正确的UTF-8标头 Notepad ++设置为使用不带BOM的UTF-8 数据库管理在phpMyAdmin中处理 并非所有重音符号的情况都被破坏 我需要某种函数来帮助我将ƒ,®,?,?¼和其他类似的实例

  • 我尝试用JasperReport导出CSV文件,问题是当我想打印像“€”这样的货币时。 当我搜索解决方案时,我意识到这是关于文件编码的!我写这个代码! JasperReport导出的文件编码在“没有BOM的UTF-8”上。所以当我用Excel打开文件时,“€”看起来像“,”。但是当我用记事本打开文件时,“€”看起来像“€”。 在记事本上,我将文件编码转换为UTF-8(我认为是BOM),我保存文件。