首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何输入非BMP unicode (大于4个字符的十六进制)作为Mathematica的输入

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

Stack Overflow用户
提问于 2011-11-09 00:56:42
回答 2查看 699关注 0票数 9

问题描述: Mathematica使用"\:nnnn"作为unicode输入的语法。例如,如果我们输入"\:6c34",就会得到"水" (中文中的“水”)。但是,如果一个人想要进入"\:1f618" (脸扔出一个吻)呢?当我尝试这个时,我得到的是"ὡ8",而不是"a face throwing a kiss"。所以,数学在我进入"8"之前对"8"进行评估。

问题:,我们如何延迟计算,或者如何输入任何unicode输入(对于大于4个字符的十六进制输入)?

软件和硬件平台:--我在英特尔的Mac上运行数学8。我试过命令行版本的Mathematica和Mathematica笔记本,它们的行为都是一样的。

谢谢。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-09 08:29:13

简短的回答:,你不能这么做,因为数学不支持这些字符。请看帖子的末尾,找出一些解决办法。

只是为了澄清一些事情:

不需要使用32位编码来处理超过65000个Unicode字符.Unicode、UTF-8和乌特夫-16使用的最常见编码是多字节编码,这意味着可以使用可变字节数来表示字符。UTF-16可以使用2或4个字节来表示一个字符。Mathematica内核将将每个2字节序列解释为字符串中的单个字符,有时会导致一些无效字符(当遇到4字节序列时)。这可能被认为是一个bug。前端对于它处理4字节序列的方式很不满意,这绝对是一个错误。

有限公司

当严格在内核中工作时(例如,从文件中读取Unicode数据),我有时会使用这个函数作为解决办法,以获得2单元(4字节) UTF-16序列的实际Unicode代码点:

代码语言:javascript
复制
toCodePoint[{a_, b_}] /; 16^^d800 <= a <= 16^^dbff && 16^^dc00 <= b <= 16^^dfff := (a - 16^^d800)*2^10 + (b - 16^^dc00) + 16^4

您可以使用

代码语言:javascript
复制
Split[ToCharacterCode[str], If[16^^d800 <= # <= 16^^dbff, True] &]

若要将UTF-16字符串正确拆分为Unicode字符(取决于字符的长度-1或长度-2),请执行以下操作。

这是一个丑陋而不方便的解决方法,它将不允许您在前端显示这些字符的任何内容,除非您想出一些解决方案,例如从unicode.org导入字形参考图像(至少对于CJK它们有)。

也见

请参阅我先前就同一主题提出的问题:用Mathematica读取UTF-8编码的文本文件

如果你要与中国人合作,你可能也会遇到另一个问题:让Mathematica前端服从FontFamily选项

票数 9
EN

Stack Overflow用户

发布于 2011-11-09 01:18:44

根据数学8中的此页帮助:

代码语言:javascript
复制
Mathematica supports both 8- and 16-bit raw character encodings.

他们大概是说,他们不支持32位编码,因为需要支持你想要的角色。

作为进一步的证据(在文档中没有明确的声明),同一页面上支持的编码列表没有32位编码。32位编码显然只支持在MathLink中。我想用户的需求还不够。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8059153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档