【问题标题】:Android UTF-8 vs ANSI .equals not working / how change charset?Android UTF-8 vs ANSI .equals 不起作用/如何更改字符集?
【发布时间】:2014-06-30 10:46:19
【问题描述】:

我从 csv 或 txt 文件中读取了我的 android 应用程序的列表。

如果使用 Notepad++ 对文件进行了 UTF-8 编码,我可以列出所有内容。但我无法使用 .equals 搜索/查找字符串。

如果文件用寡妇编码为 ansi,则看不到 äöü 等。但现在我可以找到字符串。

现在我的问题。我怎样才能知道我的字符串有什么字符集?

我将我的第一个字符串(来自文件)与另一个字符串进行比较,在应用程序中使用 searchview 读取。

我“认为”来自应用程序的 searchview 字符串也是 ansi,如何将其更改为 UTF-8 并希望比较再次起作用。

Android 4.4.2

谢谢

以下工作:

String s = null;
try
{
    s = new String(query.getBytes(), "UTF-8");
}
catch (UnsupportedEncodingException e)
{
    Log.e("utf8", "conversion", e);
}

【问题讨论】:

    标签: java android string utf-8


    【解决方案1】:

    无论字符串数据来自何处,Java 字符串始终编码为 UTF-16。

    在将源数据转换为 Java 字符串时,正确识别源数据的字符集非常重要。如果 byte[] 数组实际上是 UTF-8 编码的,new String(query.getBytes(), "UTF-8") 可以正常工作。如果您指定了错误的字符集,那么只有在您指定了 Java 不支持的字符集时才会收到 UnsupportedEncodingException 错误。但是,如果您指定了 Java 确实支持的字符集,然后数据解码失败(通常是因为您为数据指定了错误的字符集),您将得到其他错误,例如 MalformedInputExceptionUnmappableCharacterException,或者更糟的是,您根本不会收到任何错误,格式错误/非法字节将被简单地转换为 Unicode U+FFFD 替换字符。如果您需要在转换过程中更好地控制错误处理,则需要改用CharsetDecoder 类。

    有时 UTF 编码的文件会在前面有一个 BOM,所以您可以检查一下。但是 Ansi 文件不使用 BOM。如果文件中不存在 UTF BOM,那么您必须分析原始数据并进行猜测(如果猜测错误会导致问题),或者只是询问用户要使用哪个字符集。

    始终了解数据的字符集。如果您不知道,请询问。避免猜测。

    【讨论】:

    • 非常感谢,这是我现在阅读的内容:laktoseListName.add(new String(tempArray[0].getBytes(), "UTF-8"));
    • tempArray 声明为什么?如果是String 值的数组,则无需进行任何转换:laktoseListName.add(tempArray[0]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2012-08-29
    • 2012-08-26
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多