【问题标题】:jetty ,websockets and UTF8 encodingjetty、websockets 和 UTF8 编码
【发布时间】:2012-06-19 05:52:17
【问题描述】:

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

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

客户端 2 收到消息并在浏览器 html 页面上打印消息,效果很好 字符显示正确。

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

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

谢谢

【问题讨论】:

  • 不确定它是否适用,但我在这里偶然发现了一篇类似的文章,它解释了一些 mimetypes 在 Jetty 中是如何被默认解释为非 UTF8 的:stackoverflow.com/a/31854430/3196753

标签: java javascript jetty websocket embedded-jetty


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      相关资源
      最近更新 更多