我的Unicode相关词汇不是很好,很抱歉这个冗长的问题。
像ã
这样的字符可以用\u00e3
(带有代字号的拉丁字母小写字母)或\u0061
(拉丁字母小写字母a)与组合变音符号{{1 (组合波浪号)。现在,在Java中,为了匹配任何Unicode字母,我会寻找\u0303
,但JavaScript不明白,所以我必须寻找单个代码点([\p{L}]
)。我怎样才能从ã开始,找出用Unicode表示的各种方式,这样我就可以用\unnnn
格式将它们包含在我的正则表达式中?
答案 0 :(得分:2)
我如何从一个ã开始,并弄清楚它可以用Unicode表示的各种方式
您正在寻找Unicode Equivalence。
您提到的两种表单是composed form
和decomposed form
。要获取cannonically equivalent Unicode表单,您可以使用String.prototype.normalize()
。
str.normalize([form])
接受以下表格:
在打印或显示时,假定定义为规范等效的代码点序列具有相同的外观和含义。
假定定义为兼容的序列可能具有不同的外观,但在某些情况下具有相同的含义。
- 选择你喜欢的等价形式。
例如,使用兼容性表单中的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));