美好的一天.
我有一个西班牙语单词的ASCII文件.它们只包含A和Z之间的字符,加上Ñ,ASCII代码165(http://www.asciitable.com/).我用这个源代码得到这个文件:
InputStream is = ctx.getAssets().open(filenames[lang_code][w]);
InputStreamReader reader1 = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(reader1, 8000);
try {
while ((line = reader.readLine()) != null) {
workOn(line);
// do a lot of things with line
}
reader.close();
is.close();
} catch (IOException e) { e.printStackTrace(); }
Run Code Online (Sandbox Code Playgroud)
这里我称之为workOn()的函数应该从字符串中提取字符代码,就像这样:
private static void workOn(String s) {
byte b;
for (int w = 0; w < s.length(); w++) {
b = (byte)s.charAt(w);
// etc etc etc
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这里发生的是,当它代表Ñ字母时,我无法将b识别为ASCII码.b的值对于任何ascii字母都是正确的,并且在处理Ñ时返回-3,带来签名的是253,或ASCII字符².没什么相似的Ñ......
这里发生了什么?我该如何获得这个简单的ASCII码?
令我生气的是我无法找到正确的编码.甚至,如果我去浏览UTF-8表(http://www.utf8-chartable.de/)Ñ是209dec而253dec是ý,165dec是¥.再次,不是我需要的事件亲属.
所以...请帮帮我!:(
您确定要阅读的源文件是UTF-8编码的吗?在UTF-8编码中,所有大于127的值都保留用于多字节序列,并且它们永远不会独立存在.
我的猜测是,您正在阅读的文件使用"代码页237"进行编码,这是原始的IBM PC字符集.在该字符集中,Ñ由小数165表示.
许多现代系统使用ISO-8859-1,它恰好相当于Unicode字符集的前256个字符.在那些中,Ñ字符是十进制的209.在评论中,作者澄清说209实际上在文件中.
如果文件真的是UTF-8编码,则Ñ将表示为双字节序列,并且既不是值165也不是值209.
基于上述假设文件是ISO-8859-1编码,您应该能够通过使用以下方法解决问题:
InputStreamReader reader1 = new InputStreamReader(is, "ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)
这将转换为Unicode字符,然后您应该找到由decimal 209表示的字符Ñ.
| 归档时间: |
|
| 查看次数: |
4178 次 |
| 最近记录: |