Я делаю веб-IRC-клиент с использованием Javascript и Java-апплета (для сокета. Я использовал Flash раньше, но поскольку он имеет строгие ограничения безопасности, серверы, к которым он может подключаться, ограничены. Поэтому я начал использовать Java-апплет, которыйЯ не использовал раньше, поэтому у меня было много проблем с этим, таких как использование <applet>
, компиляция апплета и подпись jar.), И у меня есть странное явление.
Когда строка передается изАпплет Javascript to Java (например, irc.sendLine("foobar")
), иногда символы, код которых 65533(�)
или 127
, а иногда другие вещи, такие как 110
или число в ASCII ((
), дополняются.Это может быть проблемой кодирования, но я думаю, что это не так, потому что кодировка, используемая на Java и HTML-странице, UTF-8
, и это происходит, даже если строка состоит только из буквенно-цифровых символов.
Более странно, этопроисходит только в Google Chrome.В Firefox нет отступов (что нормально.)
Я изменил свой код Java-апплета для устранения проблемы.
Ниже приведена часть моего кода (traceStr
выводит строку вконсоль Javascript)
public void sendLine(String s){
traceStr(dumpStr(s));
}
private String dumpStr(String s){
String result = "";
for(int i=0;i<s.length();i++){
result += s.codePointAt(i);
if(i<s.length()-1) result += " ";
}
return result;
}
и sendLine
вызывается с помощью консоли JS, например irc.sendLine("foobar")
.
Вот некоторые выходные данные (добавляя 0
несколько раз)
48 40 65533
48 48 65533 65533 65533 127
48 48 48 65533 65533 127
48 48 48 48 65533 127
48 48 48 48 48 127
48 48 48 48 48 48
48 48 48 48 48 48 48
48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 99 111 110 110 101 99 116
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 65533 65533
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 65533 65533 127
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 65533 127
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 127
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 127
Выход для The quick brown fox
:
84 104 101 32 113 117 105 99 107 32 98 114 111 119 110 32 102 111 120 65533 65533 127
Выход для 天
, 天1
, 天11
, 天111
и 天地
:
22825 65533 65533 127
22825 49 65533 127
22825 49 49 127
22825 49 49 49
22825 22320
Я использую Google Chrome 17.0.932.0 и Java 1.6.0_23 в Ubuntu 11.10.Этого не произошло, когда я использовал Flash.Кто-нибудь может определить, что я сделал не так?Исходя из выводов, я предполагаю, что что-то не так связано с UTF-8
, но я больше не знаю ...
Кстати, многие ответы на подобные вопросы, которые я нашел на SO, упоминают ISO-8859-1
, ноэто связано с этой проблемой?