Jun*_*ook 3 javascript unicode character-encoding non-ascii-characters
我正在使用条形码扫描仪读取我网站上的条形码(该网站是在OpenUI5中制作的).
扫描仪的工作方式类似于键入其读取的字符的键盘.在键入的结尾和开头,它使用一个特殊字符.这些字符对于每种类型的扫描仪都是不同的.
一些可能的角色是:
在我的代码中,我if (oModelScanner.oData.scanning && oEvent.key == "\u2584")用来检查扫描仪的输入是否为.
有没有办法从\ uHHHH样式中获取该字符的代码?(HHHH是角色的十六进制代码)
我尝试了charCodeAt,但这会返回十进制代码.
使用codePointAt示例,他们将我需要的代码变成十进制代码,所以我需要反过来.
如果你想打印一个字符的多个代码点,例如表情符号,你可以这样做:
\nconst facepalmWithExtraAttributes = "\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f"; // sex, skin, etc\nconst codePoints = Array.from(facepalmWithExtraAttributes)\n .map((character) => character.codePointAt(0).toString(16))\n .map((hex) => "\\\\u{" + hex + "}");\nconsole.log({\n facepalmWithExtraAttributes,\n codePoints\n}); // { "facepalmWithExtraAttributes": "\\u200d\xe2\x99\x82\xef\xb8\x8f", "codePoints": [ "\\\\u{1f926}", "\\\\u{1f3fc}", "\\\\u{200d}", "\\\\u{2642}", "\\\\u{fe0f}" ] }Run Code Online (Sandbox Code Playgroud)\r\n如果您想了解 \xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f 的组成部分和长度,请查看这篇文章。
\nJavascript字符串有一个方法codePointAt,它为您提供基数为10的给定符号的整数值,如果您希望将整数格式化为四个十六进制数字序列,则需要转换基数为16(十六进制)的整数(如尼古拉斯帕索夫的回应).
var hex = "?".codePointAt(0).toString(16);
var result = "\\u" + "0000".substring(0, 4 - hex.length) + hex;
Run Code Online (Sandbox Code Playgroud)
但是,如果关键代码点整数与预期代码点匹配,则可能更容易直接检查
oEvent.key.codePointAt(0) === '?'.codePointAt(0);
Run Code Online (Sandbox Code Playgroud)
请注意,"符号相等"实际上可能更棘手:某些符号由代理对定义(您可以将其视为定义为四个十六进制数字序列的两半的组合).
出于这个原因,我建议使用专门的库.
您可以在Mathias Bynens的相关文章中找到更多详细信息
var hex = "\xe2\x96\x84".charCodeAt(0).toString(16);\nvar result = "\\\\u" + "0000".substring(0, 4 - hex.length) + hex;\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2446 次 |
| 最近记录: |