为什么以两种不同方式解码的文本在GWT中不匹配?

为什么以两种不同方式解码的文本在GWT中不匹配?,gwt,encoding,decoding,file-encodings,string-decoding,Gwt,Encoding,Decoding,File Encodings,String Decoding,我一直在努力寻找为什么我的俄语翻译没有正确地出现在我游戏的GWT版本中。我把范围缩小到文件解码出了问题。此代码在GWT环境之外正常工作 我从这个测试的字符串创建UTF-8字节数组。下面的方法将文本的两个实例输出到日志。第一个使用newstring(bytes)并给出正确的输出,第二个使用BufferedReader并产生不正确的输出。可以看到这两个文件的差异 我用于本地化的类使用的是ByteBuffer方法,因此输出的俄语翻译文本不正确,我很难理解为什么 public void test(){

我一直在努力寻找为什么我的俄语翻译没有正确地出现在我游戏的GWT版本中。我把范围缩小到文件解码出了问题。此代码在GWT环境之外正常工作

我从这个测试的字符串创建UTF-8字节数组。下面的方法将文本的两个实例输出到日志。第一个使用
newstring(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());
}

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

UTF-8解码器正在对
ByteArrayInputStream
BufferedReader
部分字符串进行解码,这会破坏结果。这似乎是GWT的问题