我从csv或txt文件中读取了我的Android应用程序列表。
如果使用Notepad ++对文件进行UTF-8编码,请将列表设置为正确。但我无法使用.equals搜索/查找字符串。
如果文件是用寡妇作为ansi编码的,则无法看到äöü等。但现在我可以找到字符串了。
现在我的问题。我怎样才能发现我的字符串有什么字符集?
我将我的frist字符串(来自文件)与另一个字符串进行比较,使用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);
}
答案 0 :(得分:1)
无论字符串数据来自何处,Java字符串始终都编码为UTF-16。
在将源数据转换为Java字符串时,正确识别源数据的字符集非常重要。如果new String(query.getBytes(), "UTF-8")
数组实际上是UTF-8编码,byte[]
将正常工作。如果指定了错误的字符集,则只有在指定Java不支持的字符集时才会出现UnsupportedEncodingException
错误。但是,如果指定Java支持的字符集,然后数据解码失败(通常是因为您为数据指定了错误的字符集),则会出现其他错误,例如MalformedInputException
或{{ 1}},或者更糟糕的是,你根本不会得到任何错误,而且畸形/非法字节将简单地转换为Unicode UnmappableCharacterException
替换字符。如果您需要在转换过程中更好地控制错误处理,则需要使用CharsetDecoder
类。
有时,UTF编码的文件会在前面有一个BOM,因此您可以检查它。但Ansi文件不使用BOM。如果文件中不存在UTF BOM,那么您必须分析原始数据并进行猜测(如果您猜错了会导致问题),或者只是询问用户使用哪个字符集。
始终了解数据的字符集。如果你不知道,请问。避免猜测。