奇怪的字符转换,需要帮助澄清

时间:2018-11-29 23:28:17

标签: java unicode jsoup character jxl

因此,我正在编写一个程序,该程序将从网页中提取的数据提取到Excel工作表中,然后将其打印到文本注释中。但是,我遇到的一个奇怪的问题是,从excel工作表到文本注释,字符已更改。 -已经变成了? 。我的解决方案是遍历单词以及何时到达?并将其更改为-。我尝试使用在网上找到的unicode并完成

.replace("(question mark unicode) ", " - ") 

无济于事。有谁知道为什么要这么做吗?您可以确认的unicode吗?和-。因此,如果单词是“ Leo‑III 1.3”,则现在是“ Leo?III 1.3”。谢谢您的帮助

3 个答案:

答案 0 :(得分:1)

在Java中的替换将字符作为第一个参数,并将所有出现的内容替换为第二个参数。

您可以宁愿使用它:

ParquetDatasetPiece

replaceAll将第一个参数作为正则表达式,并用第二个参数替换所有匹配项。

注意:\帮助逃脱?

另外,由于字符串是不可变的,请确保将结果存储在新的String变量中。

答案 1 :(得分:1)

根据Java文档,String类的replace方法采用原始的char或实现CharSequence的对象(如String)作为其参数。

如果要将Leo?III 1.3转换为Leo-III 1.3,请使用:

.replace("?", "-")

答案 2 :(得分:1)

?是字符集编码问题的结果,并且可能发生在数据管道的许多地方。

它实际上可能是在字符串的打印中,并且字符串本身是有效的。

要了解实际的字符值是什么,请尝试运行以下代码以打印字符串中找到的所有非ASCII字符的Unicode转义:

public static void printNonAscii(String s) {
    TreeSet<Character> nonAscii = new TreeSet<>();
    for (char ch : s.replaceAll("[\r\n\\x20-\\x7E]", "").toCharArray())
        nonAscii.add(ch);
    for (char ch : nonAscii)
        System.out.printf("\\u%04X  %s%n", (int) ch, ch);
}

测试(UTF-8中的源代码)

printNonAscii("Foo ? \uFFFD ç ñ © ¼");

输出

\u00A9  ©
\u00BC  ¼
\u00E7  ç
\u00F1  ñ
\uFFFD  �