当我将字符串从Javascript传递到Java applet时,字符串会发生奇怪的变化
Strings are changed strangely when I pass a string from Javascript to Java applet
我正在使用Javascript和Java applet(用于套接字)制作web IRC客户端。我以前用过Flash,但由于它有严格的安全限制,它可以连接的服务器受到限制。于是我开始使用Java applet,这是我以前没有使用过的,所以我遇到了很多问题,如使用<applet>
,编译applet,签名jar.),我有一个奇怪的现象。
当字符串从Javascript传递到Java applet(如irc.sendLine("foobar")
)时,有时代码为65533(�)
或127
的字符,有时其他内容如110
或ASCII ((
)中的数字被填充。这可能是编码问题,但我认为它不是,因为Java和HTML页面中使用的字符集都是UTF-8
,甚至当字符串仅由字母数字组成时也会发生这种情况。
更奇怪的是,它只发生在谷歌浏览器。在Firefox中,没有填充(这是可以的)
我修改了Java applet代码来调试这个问题。
下面是我的一部分代码(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
我在Ubuntu 11.10上使用Google Chrome 17.0.932.0和Java 1.6.0_23。当我使用Flash时,这种情况不会发生。谁能指出我做错了什么吗?从输出我猜有一些错误的UTF-8
,但我不知道了…
顺便说一句,我在SO上发现的许多问题的答案都提到了ISO-8859-1
,但它与这个问题有关吗?
JavaScript是UTF-16。因此,从UTF-16转换到UTF-8可能会产生意想不到的副作用。
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 单击页面上的链接后高度发生变化
- 如何将字符串值从php页面发送到java脚本页面
- 如何用jquery替换字符串中可能变化的字符
- 由于布尔值的变化,Django视图中的字符串格式不正确
- 如果两个值都会动态变化,则用变量替换某个字符串的一部分 - Javascript
- 如何在两个不断变化的字符串之间选择中间文本
- 正则表达式或匹配字符串,只有一个动态变化的部分
- 如何获得两个字符串之间的变化(插入,删除或相同)
- 如何用javascript计算字符串变化的次数
- 当我将字符串从Javascript传递到Java applet时,字符串会发生奇怪的变化
- 如何观察字符串的变化-退格添加,在角度
- Javascript的变化与重复(组合)缺失的字符串字符
- 如何使DateTime字符串根据时区变化
- 为什么' this '在作为字符串或引用传递函数参数时发生变化
- Javascript字符串在转换为日期()时发生变化