【问题标题】:Java int to char with special charactersJava int 到带有特殊字符的 char
【发布时间】:2013-02-22 03:21:05
【问题描述】:

以前,我有一个这样的代码:

        Writer writer = new OutputStreamWriter(System.out, "UTF-8");
        generator.stream(writer);

现在,我的代码如下所示:

            string = new StringBuilder();
            OutputStream output = new OutputStream()
            {
                public String getString()
                {
                    return string.toString();
                }
                @Override
                public void write(int b) throws IOException {
                if ((char)b != '\n')
                {
                    string.append((char) b );
                }
            }

            public String toString(){
                return string.toString();
            }
        };

        Writer writer = new OutputStreamWriter(output, "UTF-8");
        generator.stream(writer);

        writer.close();
        PrintStream ps = new PrintStream(System.out, true, "UTF-8");
        ps.println(string.toString());

第一个代码的问题在于它不能保证输出在一行中。另一方面,我的新代码解决了这个问题,但是,出现了一个新问题:输出发送的是 'ᅢチ' 而不是 'Á',这很痛苦,因为应该支持匈牙利和波兰字符。对于非匈牙利语、非波兰语字符,我当前的输出是正确的,但我的新代码无法处理书面匈牙利语和波兰语中的特殊字符。我该如何克服这个问题?

谢谢。

【问题讨论】:

标签: java encoding stream streaming inputstream


【解决方案1】:

这一定是因为操作系统的默认字符集。
我有关于 é 转换为 é 的类似问题。
我将 JVM file.encoding 更改为 UTF 为-Dfile.encoding=UTF-8。
然后我的问题就解决了。

也请阅读:

【讨论】:

  • 谢谢,但我的系统编码是 UTF-8。我相信我错误地处理了名为 output 的变量,因为名为 string 的对象在匈牙利语和波兰语字符中已经存在这个缺陷。
【解决方案2】:

改为扩展 OutputStreamWriter 类并覆盖适当的方法以删除换行符。

public class NoNewLineOutputStreamWriter extends OutputStreamWriter {

    public NoNewLineOutputStreamWriter(OutputStream out,String charset) throws UnsupportedEncodingException {
        super(out,charset);
    }

    public void write(String str) throws IOException {
        super.write(str.replaceAll("\n", ""));
    };

    public void write(int c) {
        if (c == '\n')
            return;
        else
            super.write(c);
    }

}

然后像以前一样打电话给你的作家

    Writer writer = new NoNewLineOutputStreamWriter(System.out, "UTF-8");
    generator.stream(writer);

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多