码头,网络套接字和UTF8编码



我遇到了一个小问题。我正在用java构建一个小型服务器,基于jetty websockets实现。客户端是浏览器,我使用 websockets javascript API 发送信息。

一切都很好,直到我发送那些特殊字符,例如:ă Ț î ș ê ñ ü所以这就是问题所在。客户端 1 使用此字符之一向服务器发送消息。服务器打印消息,然后将消息发送到客户端 2。

客户端 2 接收消息并在浏览器 html 页面上打印消息并运行良好 字符显示正确。

问题是当我想在服务器站点上打印字符串时。而不是 ă 是向我显示 字符。这给我带来了问题,因为我想在数据库中插入文本(mysql-启用了ut8编码)

所以......似乎有什么问题。从浏览器发送的文本不是 UT8 编码的?或者 Jetty Websocket 实现没有接收 utf8 编码的字符串?

谢谢

这是我用来对字符串中的所有特殊字符进行 HTML 编码的函数(但不是 html 本身(如 <> ))。如果在将字符串发送到服务器之前应用它,每个人都应该看到相同的内容,您可以将其存储在数据库表中:

function toHtmlEncoded(string){
    return string.replace(/[u0080-uC350]/g, 
                      function(a) {return '&#'+a.charCodeAt(0)+';';}
           );
}

首先阅读此 http://kunststube.net/encoding/

然后检查将字节转换为字符串的所有位置(或相反)。犯错误的常见位置包括在未指定编码的情况下在String上调用getBytes()。其他陷阱包括不在数据库连接字符串中设置编码。

最新更新