1

可能重复:
Javascript:Unicode 字符串按字符分割

我有一个包含一些泰米尔语字符的 javascript 字符串。我需要将它们拆分为单独的 unicode 字符。split 方法不理解http://en.wikipedia.org/wiki/Complex_text_layout复杂的文本布局。

例如:

在 "கதிரவன்" 上调用 split("") 返回:

,க,த,ி,ர,வ,ன,்</p>

当我预期:

க,தி,ர,வ,ன்

应该怎么做才能正确地从字符串中拆分 unicode 字符?

编辑:我可以在浏览器(chrome)中很好地浏览这些字母。我正在尝试在 chrome 扩展中使用这个 js。因此,如果也有特定于 chrome 的解决方案,我很好。

4

4 回答 4

3

这是完全可行的。

首先,您创建一个集合/字典,其中包含所有类似变音符号的字符作为键,我们可以将其命名为diacritics,并仅使用对象字面量实现它:

var diacritics = {'\u0bbf':true,'\u0bcd':true,...};

然后这样做:

var tempList = "கதிரவன்".split('');
var targetList = [];
for(var idx in tempList){
  if(diacritics[tempList[idx]])
    targetList[targetList.length - 1] +=  tempList[idx];
  else
    targetList.push(tempList[idx]);
}

我们甚至不需要 a tempList,只需按 char 循环遍历 str char 就可以了:

for(var i = 0; i != str.length; ++i){
  var ch = str[i];
  diacritics[ch] ? (targetList[targetList.length - 1] += ch) : targetList.push(ch);
}
于 2012-10-21T13:36:27.360 回答
1

您是否尝试过像https://github.com/reyesr/javascript-unicode这样的 unicode 库,它提供与 unicode 类型相关的方法,例如测试标点符号或分隔符并根据它进行拆分(您将无法使用String.split() 方法虽然我猜)。或者,使用 unicode 表中的所有分隔符创建一个大的正则表达式,并使用它来拆分您的文本。我认为您并不缺乏选择,尽管您对缺乏本机支持是正确的。

于 2012-10-22T06:18:01.677 回答
0

我担心您最好的解决方案是构建和使用 Web 服务来完成这项工作。将必要的数据和算法移植到 javascript 中将是一项艰巨的工程。

于 2012-10-21T12:59:21.577 回答
0

从 javascript 手动执行这将是安静的笨重,因为 javascript 本身虽然是 unicode,但将字符串解释为 ascii。有关为什么这不是一个选项以及可能的解决方法的信息,请参阅这篇文章

于 2012-10-21T13:04:42.837 回答