首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将所有相似的Unicode字符分组为合适的ASCII字符

是否可以将所有相似的Unicode字符分组为合适的ASCII字符
EN

Stack Overflow用户
提问于 2017-10-30 19:57:53
回答 2查看 308关注 0票数 0

我想获取所有看起来几乎相同的符号(从所有字母表中),并将其替换为最接近的ASCII字符。所以它看起来就像:Ĉ,o,ö,ó,øUnicode o。这不一定是音译的,就像这个库https://github.com/gcardone/junidecode (我们不应该把符号翻译成ASCII码(意思接近于-> s),但我们应该发现ASCII码符号与Ĉ组(例如Ĉ-C)非常相似)。

EN

回答 2

Stack Overflow用户

发布于 2017-10-31 00:09:39

我不认为这个问题有任何简单的解决方案,因为你想要分组的符号,并不是一个真正的组。符号“、?、?和”在形状上都是类似于“O”的,并且具有相似的代码点(0xD2-0xD8)。在一些语言中,他们甚至可能有一些相似的发音,尽管这不能保证。一个恰当的例子是字母'eth‘,它看起来有点像"o“,但在任何使用它的语言(据我所知)中,它的发音都不太相似。您已经认识到法语中的"ç“在发音上更可能与"s”相关,而不是其形状类似于"c“。

我认为如果你想承担这项任务,你将不得不通过逐个码位转换来完成它(啊!)然而,我认为更难的问题根本不在编程中--它将寻找对读者来说真正有意义的映射,因为符号形状和语言角色之间几乎没有联系。这种类型的原型错误是将西班牙语的“año”(年份)呈现为"ano“(意思是"anus")。你真的不想犯这样的错误。

票数 2
EN

Stack Overflow用户

发布于 2017-10-31 00:42:01

您可以删除组合字符,但并非所有示例都使用它们。例如,§(eth)本身就是一个字母,而不是带斜杠的"d“。波兰语的"dark l“也是如此,ł。

代码语言:javascript
复制
import java.text.Normalizer;

public class RemoveMarks {

  public static void main(String... argv) {
    String src = "ðôöõøĈł";
    String dst = Normalizer.normalize(src, Normalizer.Form.NFKD);
    System.out.println(dst.replaceAll("\\p{Mn}+", ""));
  }

}

这应该会打印出“oooøCł”。您可以看到,与"C“一样,真正的字母"o”已经删除了它们的组合字符。

然而,这就引出了一个问题:你为什么要这样做?为什么你要用一种在拼写上没有意义的方式销毁信息?

如果您正在尝试匹配、搜索或索引文本,则应使用为所需区域设置正确配置的Collator。这将自动忽略该语言环境中的用户不关心的差异。例如,在美式英语中,“naive”等同于"naive",而"résumé“只是拼写”简历“的一种乏味的方式。排序器可以负责匹配这些变体。

代码语言:javascript
复制
Collator collator = Collator.getInstance(Locale.US);
collator.setStrength(Collator.PRIMARY);
collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
Map<CollationKey, String> map = new HashMap<>();
map.put(collator.getCollationKey("resume"), "resume");
map.put(collator.getCollationKey("naive"), "naive");
System.out.println(map.get(collator.getCollationKey("RéSuMé"))); // resume
System.out.println(map.get(collator.getCollationKey("NAÏVE")));  // naive
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47014698

复制
相关文章

相似问题

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