使用重音读写文件

时间:2015-10-06 15:31:54

标签: java xml diacritics degrees tilde

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

由于文件是每字节读取的字节,如何替换重音字符的正确字节的“坏”字节? 如果每个字节读取这些字节的文件不是一个好主意,我怎么能更好地做到这一点?

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

提前致谢

3 个答案:

答案 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