Java 如何将“SecciÃn”解析为“Sección”?(字符串指责编码问题)
我有一个值为SecciÃn的字符串 我需要将其解析为UTF-8,以便将字符串转换为Sección 我尝试使用line=newstringline.getBytesUTF-8,UTF-8;但这是行不通的 编辑 我正在使用以下方法读取字符串: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;
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")