MongoDB特殊字符

11

我已经将一个初始化文件插入到MongoDB中:

db.User.insert({ "_id" : ObjectId("5589929b887dc1fdb501cdba"), "_class" : "com.smartinnotec.aposoft.dao.domain.User", "title" : "DI.", ... "address" : { "_id" : null, ... "country" : "Österreich" }})

如果我使用db.User.find()调用此条目,那么我会得到以下结果:

{ "_id" : ObjectId("5589929b887dc1fdb501cdba"), "_class" : "com.smartinnotec.aposoft.dao.domain.User", "title" : "DI.", ... "address" : { "_id" : null, ... "country" : "�sterreich" } }

带有特殊字符 "�sterreich" 的单词是不正确的。

有人知道我可以在mongodb中做什么来解决这个问题吗?


2
你是从Mongo控制台获得这个结果的吗? - Rabea
1
我也使用v3.0.7。我尝试了你的代码,没有任何奇怪的情况。我想问和Rabee一样的问题:“你是从mongo控制台获取这个结果的吗?”因为MongoDB以UTF8编码的BSON形式存储数据。更改可能会在发送到MongoDB之前立即发生。祝好运。 - efkan
1
在控制台上一切正常,我使用的是Windows 7。 - quma
1
这个问题发生在哪里?插入查询是从哪里运行的? - Amir
2
你正在打印结果的控制台,试图用UTF-16或其他多字节字符集来表示单字节字符(UTF-8)。你需要更改控制台设置以显示UTF-8格式的字符。 - BatScream
显示剩余3条评论
2个回答

7

JSON和BSON只能编码/解码有效的UTF-8字符串,如果您的数据(包括输入)不是UTF-8,则需要在将其传递给任何依赖于JSON的系统之前进行转换,例如:

$string = iconv('UTF-8', 'UTF-8//IGNORE', $string); // or
$string = iconv('UTF-8', 'UTF-8//TRANSLIT', $string); // or even
$string = iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $string); // not sure how this behaves

个人而言,我更喜欢第一种选择,请查看iconv()手册页面。其他替代方案包括:

mb_convert_encoding("Österreich", "UTF-8", "ISO-8859-1");

  • utf8_encode(utf8_decode($string))

您应该始终确保您的字符串是UTF-8编码的,即使是用户提交的字符串也是如此。


4

您可以在字符串中使用HTML代码

代码:

您可以使用&ouml ;将特殊字符保存到数据库中。

db.User.insert({ "_id" : ObjectId("5589929b887dc1fdb501cdba"), "_class" : "com.smartinnotec.aposoft.dao.domain.User", "title" : "DI.", ... "address" : { "_id" : null, ... "country" : "österreich" }})

当调用 db.User.find() 时,您将得到以下结果:
{ "_id" : ObjectId("5589929b887dc1fdb501cdba"), "_class" : "com.smartinnotec.aposoft.dao.domain.User", "title" : "DI.", ... "address" : { "_id" : null, ... "country" : "Österreich" } }

参考:

http://www.starr.net/is/type/htmlcodes.html

JavaScript中替换字符串中的多个字符

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接