当前位置: 首页 > 面试题库 >

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

颛孙英才
2023-03-14
问题内容

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

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

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

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


问题答案:

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

    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字符将成为问号。



 类似资料:
  • 问题内容: 我现在正在尝试将unicode字体转换为android中的ascii。我写了下面的代码将unicode字体转换为ascii,但是失败了。因为转换后结果无法正确显示。 unicode字体=’ေနေကာင္းပါသလား’类似于’\ u100F \ u1039 \ u100D’ 问题答案: 使用java.text.Normalizer类将unicode转换为ascii。这是答案的示例代码h

  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 问题内容: 我从HTML页面中将一个字符串输入到Java HTTPServlet中。根据我的要求,我得到了显示汉字的ASCII码: “可以告诉我” (无空格) 如何将该字符串转换为Unicode? HTML代码: Java代码: 如果我打印问题[0],则会得到以下值:“可以告&#3578

  • 问题内容: 我需要将由某些特定于某些语言的字母(例如HÄSTDJUR-注意Ä)组成的s 转换为不带那些特殊字母(在这种情况下为HASTDJUR)的。如何用Java做到这一点?感谢帮助! 它不是真的如何听起来。该场景如下-您要使用该应用程序,但没有瑞典语键盘。因此,您无需查看字符映射表,而是通过将特殊字母替换为拉丁字母中的典型字母来键入它。 问题答案: 我认为您的问题与此问题相同: Java-消除重

  • 问题内容: 我正在努力获取unicode字符串的计数,并尝试了各种选择。看起来像是一个小问题,但却大有作为。 在这里,我试图获取字符串str1的长度。我得到的是6。但实际上是3。将光标移到字符串“குமார்”上还会显示为3个字符。 基本上我想测量长度并打印每个字符。如“கு”,“மா”,“ர்”。 PS:这是泰米尔语。 问题答案: 找到了解决您问题的方法。 基于这个SO答案,我制作了一个使用正则

  • 我正在努力获取unicode字符串的计数,并尝试了各种选项。看起来是个小问题,但影响很大。 这里我试图得到字符串str1的长度。我得到的是6分。但实际上是3。将光标移到字符串上“குமார்“也显示为3个字符。 基本上我想测量长度并打印每个字符。像 "கு", "மா", "ர்" . 附言:这是泰米尔语。