Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扩展ascii表的读线和编码_Java_Android - Fatal编程技术网

Java 扩展ascii表的读线和编码

Java 扩展ascii表的读线和编码,java,android,Java,Android,你好 我有一个带有西班牙语单词的ASCII文件。它们只包含介于A和Z之间的字符,加上¨ASCII码165()。 我使用以下源代码获取此文件: InputStream is = ctx.getAssets().open(filenames[lang_code][w]); InputStreamReader reader1 = new InputStreamReader(is, "UTF-8"); BufferedReader reader = new BufferedReader(reader1,

你好

我有一个带有西班牙语单词的ASCII文件。它们只包含介于A和Z之间的字符,加上¨ASCII码165()。 我使用以下源代码获取此文件:

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
            }
}   
private static void workOn(字符串s){
字节b;
对于(int w=0;w
不幸的是,这里发生的事情是,当b代表字母时,我无法将其识别为ASCII码。b的值对于任何ascii字母都是正确的,并且在处理ñ时返回-3,即带符号的253或ascii字符²。没有什么类似于

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

让我生气的是我找不到正确的编码。甚至,如果我去浏览UTF-8表()ñ是209dec,253dec是ý,165dec是¥。再说一次,不是我所需要的


所以。。。请帮帮我!:(

您确定您正在读取的源文件是UTF-8编码的吗?在UTF-8编码中,所有大于127的值都是为多字节序列保留的,并且它们永远不会独立存在

我的猜测是,您正在读取的文件是使用原始IBM PC字符集“code page 237”编码的。在该字符集中,ñ由十进制165表示

许多现代系统使用ISO-8859-1,这恰好相当于Unicode字符集的前256个字符。在这些系统中,字符是十进制209。在一篇评论中,作者澄清了209实际上在文件中

如果文件真的是UTF-8编码的,那么¨将表示为一个双字节序列,既不是值165也不是值209

基于上述假设,即文件是ISO-8859-1编码的,您应该能够使用以下方法解决这种情况:

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

这将转换为Unicode字符,然后您应该找到由十进制209表示的字符ñ。

您可以在hex editor或显示原始字节的东西上查看您的文件吗?我怀疑253不是文件中的字节(因为您将流读取为UTF-8)是的,可能是……实际上这是我的问题:/正如你建议的那样,我使用十六进制编辑器查看,文件中的字符编码为209。请注意,没有“ASCII代码165”这样的东西。ASCII仅定义代码0-127;代码128-255仅在扩展ASCII的编码中定义(如CP1252、ISO 8859-1),因此它们的含义因您使用的编码不同而有所不同。嗯,我在Android上工作,我得到了一个不受支持的编码异常。我在哪里找到所有可能的编码?@BeppiMenozzi答案的作者,虽然您的文件包含字节253,因此他认为它可能是一些模糊的IBM PC代码页。现在我们知道它是209,因此,
“ISO-8859-1”
是正确的参数(我希望它在任何地方都能得到支持)。感谢Anton,它最终似乎起到了作用。那么,在处理其他字符时,如Ü或Ü?@BeppiMenozzi,我是否也应该使用相同的代码页?任何转换为八位字节的字符数据都将被编码为一种编码。如果您有“纯文本”文件,但您不知道编码,您有错误。最好强制使用编码(通常为UTF-8)或使用自描述数据格式(例如JSON、XML等)