split和indexOf不同字符串编码的问题

时间:2012-04-11 21:00:05

标签: android string

由于某些原因,在某些情况下使用string.split会出现问题。它必须与文件的编码有关。但是,我确保在Eclipse下的Encoding中,它在所有情况下都会显示“Default MacRoman” - 这是所有代码文件中使用的默认值。

然而,当我将一个字符串从我的一个java文件复制到另一个包含该字符串的文件时:

"Test String" - while typing this string again "Test String"

有区别。在第一个中,“”空间编码为160,而在第二个空间中编码为32。

因此,当使用分割时,我必须确保使用正确编码的“”。

这就是我现在的做法 - 我认为不是很优雅。

longText 包含要拆分的文字

    char splitChar;
    if (longText.indexOf((char) 32) > 0) {
        splitChar = (char) 32;
    } else
        splitChar = (char) 160;
    String splitCharString = String.format("%c", splitChar);
    String[] tokens = longText.split(splitCharString);

有更好的方法吗?

ps只是将Eclipse中的文件编码显式更改为MacRoman不起作用

1 个答案:

答案 0 :(得分:0)

160是non-breaking space字符的Latin1(以及Unicode)代码点。它与普通空间不同。

MacRoman字符集在不同的代码点处具有此功能(202)。通常,要编辑Java源代码,您应该使用Unicode编码,例如UTF-8。