我有一个XML格式的输入文件,它的格式很好,口音写得很好。使用可以正常工作的PHP脚本创建该文件。 但是当我读取XML文件并使用Java程序将其写入另一个XML时,它会使用奇怪的字符而不是带有重音符的字符。
这是读取XML文件的方法:
public static String getArchivo(FileInputStream fileinputstream)
{
String s = null;
try
{
byte abyte0[] = new byte[1024];
int i = fileinputstream.read(abyte0);
if(i != -1)
{
s = new String(abyte0, 0, i);
for(int j = fileinputstream.read(abyte0); j != -1; j = fileinputstream.read(abyte0))
{
s = s + new String(abyte0, 0, j);
}
}
}
catch(IOException ioexception)
{
s = null;
}
return s;
}
由于文件是每字节读取的字节,如何替换重音字符的正确字节的“坏”字节? 如果每个字节读取这些字节的文件不是一个好主意,我怎么能更好地做到这一点?
我需要的字符是:á,é,í,ó,ú,Á,É,Í,Ó,Ú,ñ,Ñ和°。
提前致谢
答案 0 :(得分:1)
可能您正在使用UTF-8字符集读取文件。特殊字符不是UTF-8字符集的一部分。从UTF-8更改为UTF-16
像
这样的东西InputStream in = ...
InputSource is = new InputSource(new InputStreamReader(in, "utf-16"));
正如Jordi所说,utf-8之外没有特殊的字符。 因此,将第一部分视为其他特殊字符的信息。
深入研究您的代码,我看到您读取了一个int并将其转换为String。不要转换它。读取字节和写入字节以确保数据不会更改。
答案 1 :(得分:1)
使用Chaserset ISO 8859-1为我工作。 Kotlin的语法:
val inputStream : InputStream = FileInputStream(filePath)
val json = inputStream.bufferedReader(Charsets.ISO_8859_1).use { it.readText()}
答案 2 :(得分:0)
当您阅读文件时,使用编码utf-8是最好的
BufferedReader rd = new BufferedReader(new InputStreamReader(is, "utf-8"));
在写作中也使用utf-8
OutputStreamWriter writer = new OutputStreamWriter( new FileOutputStream(filePath, true), "utf-8");
这对我有用。
当在vi编辑器或其他编辑器中读取文件时,将默认编码更改为utf-8
locale charmap LANG =的en_US.UTF-8