0

我有一个 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;
}

由于文件是按字节读取的,如何将“坏”字节替换为重音字符的正确字节?如果逐字节读取这些文件不是一个好主意,我怎样才能做得更好?

我需要的字符是:á、é、í、ó、ú、Á、É、Í、Ó、Ú、ñ、Ñ 和°。

提前致谢

4

3 回答 3

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。不要转换它。读取字节和写入字节以确保数据不会更改。

于 2015-10-06T15:34:58.113 回答
1

使用 Chaserset ISO 8859-1 为我工作。kotlin 中的语法:

val inputStream : InputStream = FileInputStream(filePath)
val json = inputStream.bufferedReader(Charsets.ISO_8859_1).use { it.readText()}
于 2019-08-16T13:26:56.753 回答
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

语言环境charmap LANG=en_US.UTF-8

于 2017-12-05T13:31:23.187 回答