为什么以两种不同方式解码的文本在GWT中不匹配?
我一直在努力寻找为什么我的俄语翻译没有正确地出现在我游戏的GWT版本中。我把范围缩小到文件解码出了问题。此代码在GWT环境之外正常工作 我从这个测试的字符串创建UTF-8字节数组。下面的方法将文本的两个实例输出到日志。第一个使用为什么以两种不同方式解码的文本在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(){
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的问题