繁体   English   中英

读和写带有重音符号的文件

[英]Read and write files with accents

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

由于文件是按字节读取的事实,如何将“坏”字节替换为带重音符号的正确字节? 如果每个字节读取这样的文件不是一个好主意,我该如何做得更好?

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

提前致谢

可能您正在读取带有UTF-8字符集的文件。 特殊字符不属于UTF-8字符集。 从UTF-8更改为UTF-16

就像是

InputStream in = ...
InputSource is = new InputSource(new InputStreamReader(in, "utf-16")); 

正如Jordi正确地说的那样,utf-8之外没有特殊字符。 因此,请考虑将第一部分作为其他特殊字符的信息。

深入了解您的代码,我看到您读取了一个int并将其转换为String。 不要转换它。 读取字节和写入字节以确保数据不会更改。

读取文件时,最好使用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 = zh_CN.UTF-8

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

val inputStream : InputStream = FileInputStream(filePath)
val json = inputStream.bufferedReader(Charsets.ISO_8859_1).use { it.readText()}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM