标签: astral-plane

实际使用中最常见的非BMP Unicode字符是什么?

根据您的经验,到目前为止,哪些Unicode字符,代码点,BMP(基本多语言平面)之外的范围是最常见的?这些是需要UTF-8中的4个字节或UTF-16中的代理项.

我希望答案是在名称中使用的中文和日文字符,但不包括在最广泛的CJK多字节字符集中,但在我最常用的项目上,英文维基词典,我们发现哥特字母是到目前为止更为常见.

UPDATE

我写了几个软件工具来扫描整个维基百科上的非BMP字符,我惊讶地发现,即使在日语维基百科中,哥特字母也是最常见的.在中文维基百科中也是如此,但它也有许多中文字符被使用多达50或70次,包括"",""和"".

unicode codepoint cjk surrogate-pairs astral-plane

101
推荐指数
3
解决办法
2万
查看次数

BMP之外的JavaScript字符串

BMP是基本的多语言平面

根据JavaScript:好的部分:

JavaScript是在16位字符集的时候构建的,因此JavaScript中的所有字符都是16位宽.

这让我相信JavaScript使用UCS-2(不是UTF-16!)并且只能处理U + FFFF以前的字符.

进一步调查证实了这一点:

> String.fromCharCode(0x20001);
Run Code Online (Sandbox Code Playgroud)

fromCharCode返回Unicode字符时,该方法似乎只使用最低16位.试图获得U + 20001(CJK统一表意文字20001)而不是返回U + 0001.

问题:是否可以在JavaScript中处理后BMP字符?


2011-07-31:来自Unicode支持Shootout的 12个幻灯片:好的,坏的,以及(大部分)Ugly很好地解决了与此相关的问题:

javascript unicode utf-16 surrogate-pairs astral-plane

38
推荐指数
1
解决办法
1万
查看次数

哪个.NET平台以及哪个版本的Windows在字符类方面支持哪个版本的Unicode?

更新了问题¹

关于字符类,比较,排序,规范化和排序规则,哪些.NET平台支持哪些Unicode版本?

原始问题

我记得有点模糊地读过.NET支持Unicode 3.0版,内部UTF-16编码不是真正的UTF-16,但实际上使用的是UCS-2,这是不一样的.例如,似乎U + FFFF以上的字符是不可能的,即考虑:

string s = "\u1D7D9"; // ("Mathematical double-struck digit one") 
Run Code Online (Sandbox Code Playgroud)

它存储字符串"?9".

我基本上是在寻找以下答案的确切参考:

  • 如果在.NET中不是真正的UTF-16,它是什么?
  • .NET支持哪种版本的Unicode?
  • 如果在不久的将来不支持或计划最新版本,是否有人知道(非)商业库或我如何解决此问题?

¹)我随着时间的推移更新了问题,对于答案和更大的社区来说似乎更合适.我留下原来的问题来代替评论中回答了哪些部分.在现有的32位Windows版本中也使用了旧的UCS-2(没有代理),.NET一直在内部使用UTF-16(带有代理).

.net c# ucs2 utf-16 astral-plane

26
推荐指数
2
解决办法
3291
查看次数

您如何从.NET字符串中获取一系列Unicode代码点?

我有一个字符范围限制列表,我需要检查字符串,但char.NET中的类型是UTF-16,因此一些字符变为古怪(代理)对.因此,当枚举a中的所有char's时string,我没有获得32位Unicode代码点,并且某些与高值的比较失败.

我非常了解Unicode,如果有必要,我可以自己解析字节,但我正在寻找一个C#/ .NET Framework BCL解决方案.所以......

如何将a转换为32位Unicode代码点string的数组(int[])?

c# string unicode char astral-plane

19
推荐指数
2
解决办法
3992
查看次数

Java正则表达式匹配基本多语言平面之外的字符

如何在java中的unicode Basic Multilingual Plane外部匹配字符(有意删除它们)?

java regex unicode astral-plane

19
推荐指数
1
解决办法
3036
查看次数

来自javascript的charcode中的Unicode字符,用于charcodes> 0xFFFF

我需要从unicode charcode中获取字符串/ char,最后将其放入DOM TextNode中,以使用客户端JavaScript添加到HTML页面中.

目前,我正在做:

String.fromCharCode(parseInt(charcode, 16));
Run Code Online (Sandbox Code Playgroud)

其中charcode是包含charcode的十六进制字符串,例如"1D400".应该返回的unicode字符是, but a ?返回了!按预期返回16位范围(0000... FFFF)中的字符.

有任何解释和/或修改建议吗?

提前致谢!

javascript unicode astral-plane

14
推荐指数
3
解决办法
1万
查看次数

char中的Unicode比U +中的U + FFFF多吗?

如何在Java中使用char显示U + FFFF上方的Unicode字符?

我需要这样的东西(如果它是有效的):

char u = '\u+10FFFF';
Run Code Online (Sandbox Code Playgroud)

java unicode utf-8 astral-plane

13
推荐指数
2
解决办法
4260
查看次数

Java charAt与具有两个代码单元的字符一起使用

来自Core Java,第一卷.第1版,第9版,p.69:

字符ℤ需要两个UTF-16编码的代码单元.调用

String sentence = "? is the set of integers"; // for clarity; not in book
char ch = sentence.charAt(1)
Run Code Online (Sandbox Code Playgroud)

不返回空格而是返回second的第二个代码单元.

但它似乎sentence.charAt(1) 确实返回了一个空间.例如,if以下代码中的语句求值为true.

String sentence = "? is the set of integers";
if (sentence.charAt(1) == ' ')
    System.out.println("sentence.charAt(1) returns a space");
Run Code Online (Sandbox Code Playgroud)

为什么?

我在Ubuntu 12.10上使用JDK SE 1.7.0_09,如果它是相关的.

java unicode utf-16 surrogate-pairs astral-plane

13
推荐指数
2
解决办法
7313
查看次数

如何在谷歌v8(和nodejs)中渲染32位unicode字符

有没有人知道如何在谷歌v8中渲染unicode'星界'字符(其CID超出0xffff),javascript vm驱动谷歌chrome和nodejs?

有趣的是,当我给谷歌chrome(它标识为11.0.696.71,在ubuntu 10.4上运行)这样的html页面时:

<script>document.write( "helo" )
document.write( " ??" );
</script>
Run Code Online (Sandbox Code Playgroud)

它将正确地呈现'宽'字符和'窄'字符,但是当我在nodejs(使用console.log())中尝试等效时,我得到一个'宽'字符的单个 (0xfffd,REPLACEMENT CHARACTER).

我也被告知,无论出于何种不可理解的原因,谷歌都决定使用16位宽的数据类型来实现字符.虽然我觉得这很愚蠢,但代理码点的设计恰恰是为了通过16位挑战的路径实现"星际代码点"的"引导".并且不知何故,运行在chrome 11.0.696.71内部的v8似乎使用了这一点unicode-foo或其他魔法来完成它的工作(我好像记得几年前我总是有盒子而不是静态页面).

啊,是的,node --version报道v0.4.10,要弄清楚如何从中获取v8版本号.

更新我在咖啡脚本中做了以下事情:

a = String.fromCharCode( 0xd801 )
b = String.fromCharCode( 0xdc00 )
c = a + b
console.log a
console.log b
console.log c
console.log String.fromCharCode( 0xd835, 0xdc9c )
Run Code Online (Sandbox Code Playgroud)

但这只会给我

???
???
??????
??????
Run Code Online (Sandbox Code Playgroud)

这背后的想法是,因为处理unicode的javascript规范的脑谜部分似乎是强制性的吗?/不是彻头彻尾的禁止?/允许?使用代理对,那么也许我的源文件编码(utf-8)可能是问题的一部分.毕竟,在utf-8中有两种编码32位码点的方法:一种是写出第一个代理所需的utf-8个八位字节,然后是第二个代码点.另一种方式(根据utf-8规范,这是首选方式)是计算得到的代码点并写出该代码点所需的八位字节.所以在这里我完全排除源文件编码的问题,只处理数字.上面的代码确实可以document.write()在chrome中使用, so i know i got the numbers right.

sigh.

EDIT i did some experiments and found …

javascript unicode v8 node.js astral-plane

9
推荐指数
1
解决办法
7246
查看次数

如何输入非BMP unicode(超过4个字符的十六进制)作为Mathematica的输入

问题描述: Mathematica "\:nnnn" 用作unicode输入的语法.例如,如果我们进入 "\:6c34",我们得到"?"(中文"水").但如果有人想进入"\:1f618"(面对投掷一个吻)会怎样.当我尝试这个时,我得到了"?8",而不是"a face throwing a kiss".所以,Mathematica "\:1f61"在我进入之前进行了评估"8".

问题: 我们如何延迟此评估或如何输入任何unicode输入(对于超过4个字符的十六进制)?

软件和硬件平台: 我在Intel Mac上运行Mathematica 8.我尝试了Mathematica和Mathematica笔记本的命令行版本,它们的行为相同.

谢谢.


思考: Unicode是一个可扩展的标准,它可以增长(它确实增长:)).实现此标准的软件系统可能只实现此标准的子集,以便有效且有用(8位,16位或32位编码).一,作为某个软件包的用户,不应该假设一旦软件说它支持unicode,它就支持通用的unicode集.

unicode wolfram-mathematica supplementary astral-plane

9
推荐指数
2
解决办法
637
查看次数