Unicode:如何获取像 ã 这样的字符的所有代码点(以便在JavaScript正则表达式中使用)?

3

我的Unicode相关词汇不是很好,对于这个冗长的问题感到抱歉。

ã 这样的字符可以用 \u00e3(带有波形符号的小写拉丁字母a)或者 \u0061(小写拉丁字母a)结合组合变音符号 \u0303(波形符号)来表示。现在,在Java中,为了匹配任何Unicode字母,我会寻找 [\p{L}],但是JavaScript无法理解它,因此我将不得不查找各个代码点(\unnnn)。我该如何从一个 ã 开始,并找出它在Unicode中的各种表示方式,以便我可以在我的正则表达式中使用 \unnnn 格式包含它们?


你的原始问题可能违反了“询问我们推荐或寻找书籍、工具、软件库、教程或其他离线资源的问题在Stack Overflow上是不合适的”规则。我已经编辑过它,尽力实现了关闭原因的后半部分(“相反,描述问题以及已经采取的解决方案。”)。 - T.J. Crowder
你可能想要改变问题的焦点,因为我认为你遇到了 X/Y 问题:你问了一个关于 X 的问题(“如何获取 Unicode 表示 ã 的方式列表,以便在正则表达式中包含它们,形式为 \unnnn),但你真正想问的是 Y(“如何可靠地检测 JS 正则表达式中的 ã,无论它是写成 \u00e3 还是 \u0061\u0303”)? - T.J. Crowder
非常有趣的问题。 - T.J. Crowder
3
您有两个问题。一个是“如何使用\p{L}之类的东西?”另一个是“如何分解Unicode字符?”第一个问题在这里讨论;第二个在这里 - Raymond Chen
1
谢谢。@raymond-chen:我真的想知道如何将其分解并打印到屏幕上,我猜这似乎是第一个问题的答案,如果我没弄错的话... - Christian
分解是你的第二个问题。第一个问题是广义字符类。 - Raymond Chen
1个回答

2
我该如何从一个ã开始,找出它在Unicode中的各种表示方式?
您需要查找Unicode等价性。您提到的两种形式是组合形式和分解形式。要获取规范等效的Unicode表单,您可以使用String.prototype.normalize()。
重要提示:请检查链接以了解浏览器兼容性。
str.normalize([form])接受以下表单:
NFC - 规范组成形式。
NFD - 规范分解形式。
NFKC - 兼容组成形式。
NFKD - 兼容分解形式。
定义为规范等效的代码点序列被认为在打印或显示时具有相同的外观和含义。
在某些上下文中,被定义为兼容的序列被认为可能具有不同的外观,但含义相同。
-选择您喜欢的等效形式。
例如,使用带波形符号的拉丁小写字母a(Latin small letter a with tilde)的兼容形式:
var char = "ã";
var nfkc = char.normalize('NFKC');
var nfkd = char.normalize('NFKD');

// Returns bytes as Unicode escaped sequences
function escapeUnicode(str){
    var i;
    var result = "";
    for( i = 0; i < str.length; ++i){
        var c = str.charCodeAt(i);
        c = c.toString(16).toUpperCase();
        while (c.length < 4) {
            c = "0" + c;
        }
        result += "\\u" + c;
    }
    return result;
}

var char = "ã";
var nfkc = char.normalize('NFKC');
var nfkd = char.normalize('NFKD');

document.write('<br />NFKC: ' + escapeUnicode(nfkc));
document.write('<br />NFKD: ' + escapeUnicode(nfkd));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接