1

以前は、次のようなコードがありました。

        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());

最初のコードの問題は、出力が 1 行になることを保証していないことでした。一方で、私の新しいコードはこの問題を解決しますが、新しい問題が発生しました。ハンガリー語とポーランド語の文字をサポートする必要があるため、'Á' の代わりに 'ᅢチ' が出力されます。ハンガリー語、ポーランド語以外の文字の場合、現在の出力は正しいですが、ハンガリー語とポーランド語で書かれた特殊文字は新しいコードでは処理されません。どうすればこの問題を克服できますか?

ありがとう。

4

2 に答える 2

3

代わりに 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);
于 2013-03-07T04:35:49.577 に答える
0

これは、OSのデフォルトの文字セットが原因である必要があります。
éからéへの変換に関しても同様の問題がありました。
JVMfile.encodingをUTFに変更しました-Dfile.encoding=UTF-8
その後、私の問題は解決しました。

これも読んでください:

于 2013-03-07T04:12:18.530 に答える