tangguo

将Unicode转换为ASCII而不更改字符串长度(在Java中)

java

在不更改字符串长度的情况下将字符串从Unicode转换为ASCII的最佳方法是什么(对我而言这很重要)?同样,没有任何转换问题的字符也必须与原始字符串位于相同的位置。因此,必须将“Ä”转换为“ A”,而不要转换为具有更多字符的隐喻。

编辑:
@novalis-此类符号(例如亚洲语言)应仅转换为某些占位符。我对这些词或它们的含义不太感兴趣。

@MtnViewMark-在任何情况下,我都必须保留所有字符的数量以及ASCII可用字符的位置。

这里有更多信息:我有一些文本挖掘工具,只能处理ASCII字符串。应该处理的大多数文本都是英语,但有些确实包含非ASCII字符。我对这些单词不感兴趣,但是我必须确保对字符串感兴趣的单词(仅包含ASCII字符的单词)在字符串转换后位于相同的位置。


阅读 272

收藏
2020-11-20

共1个答案

小编典典

如该答案中所述,以下代码应该起作用:

    String s = "口水雞 hello Ä";

    String s1 = Normalizer.normalize(s, Normalizer.Form.NFKD);
    String regex = "[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+";

    String s2 = new String(s1.replaceAll(regex, "").getBytes("ascii"), "ascii");

    System.out.println(s2);
    System.out.println(s.length() == s2.length());

输出为

??? hello A
true

因此,您首先要删除双引号,然后转换为ascii。非ASCII字符将成为问号。

2020-11-20