xstream обрабатывает неанглийские символы - PullRequest
2 голосов
/ 15 июня 2010

У меня есть следующий код:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package helloworld;

import com.thoughtworks.xstream.XStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.swing.JOptionPane;

/**
 *
 * @author yccheok
 */
public class Test {
    @SuppressWarnings("unchecked")
    public static <A> A fromXML(Class c, File file) {
        XStream xStream = new XStream();
        InputStream inputStream = null;

        try {
            inputStream = new java.io.FileInputStream(file);
            Object object = xStream.fromXML(inputStream);
            if (c.isInstance(object)) {
                return (A)object;
            }
        }
        catch (Exception exp) {
            exp.printStackTrace();
        }
        finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                    inputStream = null;
                }
                catch (java.io.IOException exp) {
                    exp.printStackTrace();
                    return null;
                }
            }
        }

        return null;
    }

    @SuppressWarnings("unchecked")
    public static <A> A fromXML(Class c, String filePath) {
        return (A)fromXML(c, new File(filePath));
    }

    public static boolean toXML(Object object, File file) {
        XStream xStream = new XStream();
        OutputStream outputStream = null;

        try {
            outputStream = new FileOutputStream(file);
            xStream.toXML(object, outputStream);
        }
        catch (Exception exp) {
            exp.printStackTrace();
            return false;
        }
        finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                    outputStream = null;
                }
                catch (java.io.IOException exp) {
                    exp.printStackTrace();
                    return false;
                }
            }
        }

        return true;
    }

    public static boolean toXML(Object object, String filePath) {
        return toXML(object, new File(filePath));
    }

    public static void main(String args[]) {
        String s = "\u6210\u4EA4\u91CF";
        // print ???
        System.out.println(s);
        // fine! show 成交量
        JOptionPane.showMessageDialog(null, s);
        toXML(s, "C:\\A.XML");
        String o = fromXML(String.class, "C:\\A.XML");
        // show ???
        JOptionPane.showMessageDialog(null, o);
    }
}

Я запускаю следующий код из командной строки в Windows Vista.

1) Могу ли я знать, почему System.out.println не может печататьиз китайского символа в консоли?

2) Я открываю файл xstream.Сохраненное значение:

<string>???</string>

Как правильно настроить xstream для сохранения китайских иероглифов?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 15 июня 2010

Согласно FAQ по XStream , он генерирует вывод (1) с любой кодировкой по умолчанию вашей платформы и (2) без пролога XML. Что действительно плохая комбинация.

FAQ рекомендует использовать toXml(Writer). Если вы используете OutputStreamWriter, вы можете указать кодировку во время построения. Поскольку XStream не выдает пролога, я рекомендую использовать «UTF-8», поскольку этого требует спецификация XML.

В качестве альтернативы, я полагаю, вы могли бы следовать одной из других рекомендаций в FAQ и вручную записать пролог XML в поток с кодировкой по умолчанию. Я не рекомендую это.

2 голосов
/ 17 июня 2010
XStream xStream = new XStream(new DomDriver("UTF-8")); 
1 голос
/ 15 июня 2010

Если кодировка символов по умолчанию на платформе не способна отображать китайский язык, вам нужно переопределить ее в консоли и при запуске Java.Чтобы задать кодировку символов Java, задайте свойство file.encoding в командной строке (оно не будет работать, если вы вызовете System.setProperty() в своей программе).

java -Dfile.encoding=Big5 ...

Iне знаю команду для настройки кодировки консоли в Vista.В Windows XP это была команда chcp («изменить кодовую страницу»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...