【问题标题】:mongoDB with non-standard UTF-8 characters具有非标准 UTF-8 字符的 mongoDB
【发布时间】:2011-09-22 01:04:42
【问题描述】:

在 MongoDB 中插入异常字符时遇到问题。

字符如下:é è í ì á à...等

基本上是拉丁国家常用的字符。

当我通过脚本插入它时(因为如果我在控制台中尝试它,它会回复“非 utf-8 字符”)它做得很好,嗯,它会将它添加到集合中,但带有一些奇怪的字符。

如果我进行查找,比如说“Olá”,并且我有一个用“Olá”搜索的字段,但使用那些奇怪的字符,它会回复我想要的字段上的数据就好了...... 但是,如果在该字段中存在某种不是标准英文字符类型的字符,则会显示如下内容:

�til?

有什么办法可以解决吗?

我正在使用 Websphere Portal 服务器,PortletView 文件以 UTF-8 输出,servlet 在发送到数据库进行查询时处理输入的数据以 UTF-8 对其进行编码,并且它还处理它检索到的数据从 DB 转换为 UTF-8(只是为了确定)。

提前致谢。

【问题讨论】:

  • 检查 servlet 过滤器是否不会导致请求使用不正确的字符编码。这可能是由于调用ServletRequest 上的getParameterXXX() 系列方法之一 将请求的字符编码设置为UTF-8
  • 好吧,当我在 DB 和 servlet 之间传输字符串时,我正在做一个转换……将它从 servlet 带到 portletview 时可能会出现问题……
  • 看来,在 servlet 的 doPost() 中,在我调用 response.getWriter() 之前,我应该执行以下操作:String contentType= "text/html;charset=UTF-8"; response.setContentType(contentType); 如果您愿意,可以发布这是一个答案,我会接受它,因为我似乎无法这么快就自己的问题发布答案。

标签: java jsp mongodb character-encoding websphere


【解决方案1】:

检查 servlet 过滤器是否没有导致请求使用不正确的字符编码。这可能是由于在将请求的字符编码设置为UTF-8 之前调用ServletRequest 上的getParameterXXX() 系列方法之一。

servlet spec 声明默认使用 ISO8859-1。请参阅SRV.3.9 请求数据编码

还要确保响应使用正确的内容类型(带编码)。正如上面评论中所说:

String contentType= "text/html;charset=UTF-8";
response.setContentType(contentType);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2016-10-23
    • 2014-02-05
    • 2011-09-30
    • 2011-04-04
    • 2017-06-18
    相关资源
    最近更新 更多