Строки меняются странно, когда я передаю строку из Javascript в Java-апплет - PullRequest
2 голосов
/ 21 ноября 2011

Я делаю веб-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, ноэто связано с этой проблемой?

1 Ответ

0 голосов
/ 21 ноября 2011

JavaScript это UTF-16. Поэтому преобразование из UTF-16 в UTF-8 может происходить с непреднамеренными побочными эффектами. Специально для знаков старше 127 десятичных.

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