2013-02-14 75 views
3

美好的一天。扩展ascii表的ReadLine和编码

我有一个带有西班牙文单词的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(); } 

这里我叫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 
      } 
} 

不幸这里发生的是,当它代表Ñ字母时,我无法将b标识为ASCII码。对于任何ASCII字母,b的值都是正确的,并且在处理Ñ,带符号,253或ASCII字符²时返回-3。没有类似于Ñ...

这里会发生什么?我应该如何获得这个简单的ASCII码?

让我发疯的是我无法找到正确的编码。即使如果我去浏览UTF-8表(http://www.utf8-chartable.de/)Ñ是209dec和253dec是ý,165dec是¥。再次,不是我需要的事件亲属。

所以......请帮助我! :(

+1

你可以看看你的文件在十六进制编辑器或显示生字节?我怀疑253不是你在一个文件中的字节(因为你正在阅读流为UTF-8) – 2013-02-14 22:55:38

+0

是的可能...这是我的问题实际上:/ – 2013-02-14 23:00:43

+0

正如你建议我,我用一个十六进制编辑器,我在文件中的字符有编码209. – 2013-02-14 23:07:26

回答

8

您确定您正在阅读的源文件是UTF-8编码吗?在UTF-8编码中,所有大于127的值都保留为多字节序列,并且他们从未见过站在他们的自己的。

我的猜测是,你正在阅读使用“代码页237”,这是原IBM PC的字符集编码。在这种字符集,n为十进制表示的文件165

许多现代系统使用ISO-8859-1,它恰好等同于Unicode字符集的前256个字符,其中,Ñ字符是小数点209.在评论中,作者澄清说209实际上在该文件。

如果该文件是真的UTF-8编码的,则N将被表示为两个字节的序列,并且将是既不是值165,也没有基于上述假设的值209

,所述文件是ISO-8859-1编码的,你应该能够通过解决情况:

InputStreamReader reader1 = new InputStreamReader(is, "ISO-8859-1"); 

这将转换为Unicode字符,然后你应该找到的字符用十进制209

代表
+0

严我在Android上工作,我得到一个不受支持的编码异常。我在哪里可以找到所有可能的编码? – 2013-02-14 23:04:17

+1

您是否尝试过“ISO-8859-1”? – 2013-02-14 23:16:33

+0

@BeppiMenozzi答案的作者,虽然你的文件包含字节253,因此他认为它可能是一些模糊的IBM PC代码页。现在我们知道它是209,因此''“ISO-8859-1”'是正确的参数(我希望它在任何地方都能得到支持)。 – 2013-02-14 23:19:43