Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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 如何将“SecciÃn”解析为“Sección”?(字符串指责编码问题)_Java_String_Encoding_Utf 8_Character Encoding - Fatal编程技术网

Java 如何将“SecciÃn”解析为“Sección”?(字符串指责编码问题)

Java 如何将“SecciÃn”解析为“Sección”?(字符串指责编码问题),java,string,encoding,utf-8,character-encoding,Java,String,Encoding,Utf 8,Character Encoding,我有一个值为SecciÃn的字符串 我需要将其解析为UTF-8,以便将字符串转换为Sección 我尝试使用line=newstringline.getBytesUTF-8,UTF-8;但这是行不通的 编辑 我正在使用以下方法读取字符串: public static String loadLine(InputStream is) { if (is == null) return null; final short TAM_LINE = 256;

我有一个值为SecciÃn的字符串

我需要将其解析为UTF-8,以便将字符串转换为Sección

我尝试使用line=newstringline.getBytesUTF-8,UTF-8;但这是行不通的

编辑 我正在使用以下方法读取字符串:

public static String loadLine(InputStream is) {
        if (is == null)
            return null;

    final short TAM_LINE = 256;
    String line;
    char[] buffer = new char[TAM_LINE];
    short i;
    int ch;

    try {
        line = "";
        i = 0;
        do {
            ch = is.read();                
            if ((ch != '\n') && (ch != -1)) {
                buffer[i++] = (char)(ch & 0xFF);

                if (i >= TAM_LINE) {
                    line += new String(buffer, 0, i);
                    i = 0;
                }
            }
        } while ((ch != '\n') && (ch != -1));

        // Si no hemos llegado a leer ning�n caracter, devolvemos null
        if (ch == -1 && i == 0)
            return null;

        // A�adimos el �ltimo trozo de l�nea le�do
        line += new String(buffer, 0, i);
    } catch (IOException e) {
        e.printStackTrace();            
        return null;
    }        
    return line;
}
字符ó在UTF-8中编码为0xc3 0xb3。看起来,无论哪个程序首先读取UTF-8编码字符串,都会在假设编码错误的情况下读取该字符串,例如windows-1252,其中0xc3编码Ã,0xb3编码³

在您的例子中,您的编辑显示,据我所知,我不懂Java,您正在逐字节读取输入,一次构建一个字符的字符串,每个字节一个字符。如果编码UTF-8使用多个字节来编码某些字符,如ó,则这不是一个好主意

应首先将输入读入字节数组,然后:


新的Stringline.getBytesUTF-8,UTF-8只是巫毒编程。我建议首先对字符编码有一个正确的理解:字符串是从哪里来的?为什么它是用错误的编码创建的?在那个阶段,修复它往往为时已晚。在将其转换为字符串之前,您需要设置正确的编码。我将该方法添加到问题中,使用InputStreamReader读取数据。在其构造函数中指定正确的编码。我认为BufferedReader有一种一次读取一行的方法。
line = new String(byteArray, "UTF-8")