我正在尝试使用zbar库构建一个 Android 应用程序来扫描代码。我生成了 UTF-8 编码的二维码,并正在使用这个 Android 应用程序来扫描它们。我正在编码的文本是“L'étoile”。我尝试了默认的 zbar 测试程序,发现它不能正确显示重音字符。所以我在下面稍微修改了它的代码,以便调试它并理解它为什么不能正确显示字符。
byte[] bytes = sym.getDataBytes();
String latin1Result = new String(bytes, "ISO8859-1");
String utf8Result = new String(bytes, "UTF-8");
Log.d("CUSTOM_DEBUG_TAG", "result " + sym.getData() + ", string " + sym.getData().toString() + ". latin1 result " + latin1Result + ". utf8 result " + utf8Result);
从日志中我得到:
CUSTOM_DEBUG_TAG(11987): result L'テゥtoile, string L'テゥtoile. latin1 result L'ï¾ï½©toile. utf8 result L'テゥtoile
在字符集和编码方面我有点迷茫,所以请多多包涵。从上面的日志中,我可以确认 zbar 库实际上返回了一个 UTF-8 编码的字符串“L'étoile”吗?如果是这样,它不应该在日志中正确显示吗?
我相信 zbar 使用 iconv 并且默认为 ISO-8859-1。所以我也尝试生成一个带有 iso-8859-1 编码文本的二维码。然后我尝试使用 Android 应用程序读取二维码,日志显示如下:
CUSTOM_DEBUG_TAG(11987): result L'騁oile, string L'騁oile. latin1 result L'é¨oile. utf8 result L'騁oile
如您所见,我无法检索重音字符串“L'étoile”。显然,有些概念我无法掌握,希望能有所帮助。
顺便说一句,如果我使用 QR Droid 或 Zxing 等应用程序扫描相同的二维码,我会得到正确显示为“L'étoile”的字符串(因此我放弃了二维码本身可能存在问题的事实)。
谢谢