1

我一直在试图找出为什么我的俄语翻译在我的游戏的 GWT 版本中没有正确显示。我已将其范围缩小到文件解码出现问题。此代码在 GWT 环境之外正常工作。

为此测试,我从一个字符串创建了 UTF-8 字节数组。下面的方法将文本的两个实例输出到日志。第一个使用new String(bytes)并给出正确的输出,第二个使用BufferedReader并产生不正确的输出。这两个文件的差异可以在这里看到。

我用于本地化的类使用的是 ByteBuffer 方法,因此为俄语翻译输出了不正确的文本,我很难理解为什么。

public void test(){
    String text = "# suppress inspection \"UnusedProperty\" for whole file\n" +
            "\n" +
            "# Notes\n" +
            "# I used the phrase \"Power Flower\" in English as it rhymes. They can be called something else in other languages.\n" +
            "# They're \"fleurs magiques\" (Magic Flowers) in French.\n" +
            "\n" +
            "# Tutorials\n" +
            "#-----------\n" +
            "Tutorial_1_1=Составляй слова, проводя пальцем по буквам.Сейчас попробуй создать слово  'СОТЫ'\n" +
            "Tutorial_1_2=Ты можешь складывать слова справа налево. Попробуй составить слово 'ЖАЛО' справа налево\n" +
            "Tutorial_1_3=Слова могут распологаться сверху вниз, снизу вверх, справа налево, слева направо, а также по диагонали.\n" +
            "Tutorial_1_4=Создавая слова, ты можешь изменять направление.Составь слово 'ВОСК'\n" +
            "Tutorial_1_5=Ты даже можешь пересекать свое собственное слово. Тем не менее, используй каждую букву только один раз. А сейчас, сложи слово 'УЛЕЙ'\n" +
            "Tutorial_1_6=Чем длиннее окажется твоё слово, тем больше у тебя шансов получить много очков и возможность заработать Чудо-Цветок. Составь слово 'ПЧЕЛА'\n" +
            "Tutorial_1_7=Получи Чудо-Цветы за каждое слово из пяти или более букв. Они могут быть использованы в качестве любой из букв.\n" +
            "Tutorial_1_8=Составь слово 'СТЕБЕЛЬ'\n" +
            "Tutorial_1_9=Из разных по длине и форме слов получаются разные Чудо-Цветы.\n" +
            "Tutorial_1_10=Теперь ты справишься сам. Составь еще четыре слова, чтобы уровень был пройден";

    // This defaults to the default charset, which in my instance, and most probably yours is UTF-8
    byte[] bytes = new byte[0];
    try {
        bytes = text.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    String test = new String(bytes);
    // This is correct
    Gdx.app.log("File1", test);

    ByteArrayInputStream is = new ByteArrayInputStream(bytes);
    InputStreamReader reader = null;
    try {
        reader = new InputStreamReader(is, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    BufferedReader br = new BufferedReader(reader);
    StringBuilder fileContents = new StringBuilder();
    String line;
    try {
        while ((line = br.readLine()) != null) {
            fileContents.append(line + "\r\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    // This is incorrect
    Gdx.app.log("File2", fileContents.toString());
}
4

1 回答 1

0

似乎UTF-8 解码器正在解码部分字符串,这会破坏结果ByteArrayInputStreamBufferedReader这似乎是一个 GWT 问题。

于 2015-09-09T19:24:25.173 回答