【发布时间】:2020-05-24 18:11:11
【问题描述】:
Java、Javascript、Windows、Dotnet、KDE 等一些语言/平台使用 UTF16。有些人更喜欢 UTF8。
没有语言/平台使用BOCU-1的原因是什么? JEP 254 和 JEP 254 equivalent for Dotnet 的基本原理是什么?
是BOCU-1申请专利的原因吗?还有什么技术原因吗?
编辑
我的问题不是专门针对 Java。 JEP 254 是指该提案中提到的紧凑型 UTF-16。我的问题是,由于 BOCU-1 对于几乎任何 unicode 字符串都很紧凑,为什么没有任何语言/平台在内部使用它,而不是 UTF-16 或 UTF-8。这种用法可以提高任何字符串的缓存性能,而不仅仅是 ASCII 或 Latin-1。
这种用法也可能有助于以The Language Server Index Format (LSIF) 等格式支持非拉丁编程语言。
【问题讨论】:
-
JEP 254 说“非目标——在字符串的内部表示中使用 UTF-8 等替代编码不是目标。后续的 JEP 可能会探索这种方法。”我认为“例如”将包括 BOCU-1。
-
@JonathanLeffler 请看我的编辑。
-
见过——但我不知道你的问题的答案是什么。我必须搜索 BOCU-1 才能找到有关它的任何信息。免版税许可表明该专利不应该有问题,尽管它确实让使用 BOCU-1 的开发人员有责任从 IBM 获得许可。我有点担心这个问题的答案将是“基于意见的”,这是结束关于 SO 的问题的原因之一。我没有将其标记为关闭(出于任何原因),但请注意,有些人可能会考虑该选项。
-
嗯,一方面,BOCU-1 更像是一种压缩方案,而不是Unicode 字节编码。例如,在访问/枚举字符串中的单个字符时,必须继续解压缩压缩字符串会降低效率。例如,JEP 254 中的紧凑字符串不使用压缩,它们仅使用较小的字节编码 (Latin-1) 以尽可能节省空间。使用 Latin-1 后端存储对字符串的 UTF-16 接口进行索引相当简单,但使用压缩后端存储对字符串的 UTF-16 接口进行索引就不是那么容易了。
-
@RemyLebeau 你有什么研究论文可以引用你对official position of the Unicode consortium的否认吗?事实上,对于南亚文、波斯文、西里尔文等许多文字,BOCU-1 UTF16 比 UTF8 UTF16 性能更高。测试机器是 Pentium 2 笔记本电脑,所以今天的机器可能会按照您提到的性能进行压缩。
标签: unicode utf-8 character-encoding utf-16 non-ascii-characters