BOCU-1用于字符串的内部编码

问题描述 投票:0回答:1

[某些语言/平台,例如Java,Javascript,Windows,Dotnet,KDE等,使用UTF16。其他一些人喜欢UTF8。

没有语言/平台使用BOCU-1的原因是什么? JEP 254JEP 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)之类的格式在非拉丁编程语言支持中有所帮助。

unicode utf-8 character-encoding utf-16 non-ascii-characters
1个回答
0
投票

没有语言/平台使用BOCU-1的原因是什么?

这个问题在堆栈溢出方面的范围太广了,简明的答案是不可能的。

但是,在Java的特定情况下,有人提出Java在2002年将BOCU-1用作RFE(增强请求)的可能性。请参见JDK-4787935 (str) Reducing the memory footprint for Strings

十年后,该错误以“ 无法修复”的分辨率关闭:

“尽管这是一个非常有趣的建议,BOCU不太可能使用]或任何​​其他供内部使用的多字节编码将采用。此外,这归结为空格-时间上的折衷,带来了不确定的长期后果。鉴于此建议的时间长了,建议关闭它似乎是适当的,因为无法解决“”>。

JEP 254的原理是什么?

JEP 254的标题为“ Motivation

”的部分对此进行了说明,并特别指出“ 大多数String对象仅包含Latin-1个字符”。但是,如果您不满意,请提出一个单独的问题。

首先查看What topics can I ask about here?,以确保它是堆栈溢出的主题。审查了JEP 254的两个人(Aleksey Shipilev和Brian Goetz)在SO上对此做出了回应,因此您可能会获得权威的答案。

Dotnet相当于... JEP 254的原理是什么?

再次,将其作为一个单独的SO问题提出。

BOCU-1获得专利的原因吗?

That question is specifically off topic here“法律问题,包括有关版权或许可的问题,对于堆栈溢出来说都是题外话”

,尽管Wikipedia notesBOCU-1是Unicode上描述的唯一Unicode压缩方案已知受知识产权限制的网站
“。

还有任何技术原因吗?

一个非常重要的非技术原因是the HTML5 specification explicitly forbids the use of BOCU-1!...

Avoid these encodings

The HTML5 specification calls out a number of encodings that you should avoid...

Documents must also not use CESU-8, UTF-7, BOCU-1, or SCSU encodings, since they... were never intended for Web content and the HTML5 specification forbids browsers from recognising them.

当然会引起为什么

问题,HTML 5禁止使用BOCU-1,而我能找到的唯一技术原因是this Mozilla documentation on HTML's <meta> element states
<meta>

Authors must not use CESU-8, UTF-7, BOCU-1 and/or SCSU as cross-site scripting attacks with these encodings have been demonstrated. 了解带有BOCU-1的XSS漏洞的更多详细信息。

还要注意,根据HTML5规范,所有主要的浏览器都不特别支持BOCU-1。

© www.soinside.com 2019 - 2024. All rights reserved.