Java 将mongo值从一种编码转换为另一种编码

Java 将mongo值从一种编码转换为另一种编码,java,mongodb,encoding,utf-8,cp1251,Java,Mongodb,Encoding,Utf 8,Cp1251,我使用java驱动程序将25万条记录放入mongodb,但忘记显式设置编码,因此在windows机器上安装linux之后,系统编码更改为cp1251,我有许多记录的值如下 П'ЅЅѕѕСЂѕззєз5зґз 我有一个解决方案-只需抛出所有项,查找并修改所有字符串字段: ... mc2.findOneAndUpdate( new Document("canonical", canonical), new Document("$set", new Document

我使用java驱动程序将25万条记录放入mongodb,但忘记显式设置编码,因此在windows机器上安装linux之后,系统编码更改为cp1251,我有许多记录的值如下 <代码>П'ЅЅѕѕСЂѕззєз5зґз

我有一个解决方案-只需抛出所有项,查找并修改所有字符串字段:

...
mc2.findOneAndUpdate(
    new Document("canonical", canonical), 
    new Document("$set", 
        new Document("regionName",
           new String(doc.getString("regionName").getBytes("cp1251"), "UTF-8"))));
...

有没有一种不用外部程序就能做到这一点的方法?(使用一些mongo js函数、实用程序等)

它“应该”存储在UTF-8中。您确定这不是“控制台输出”问题吗?请参阅@NeilLunn,它在mongodb中是utf-8,但Java在那里不是utf8。所以,当我在控制台中用Java检索数据时,一切都很好,但在所有其他程序(python、node、robomongo)中,我看到了thrash。当我在所有程序中更改编码(请参阅代码片段)时,所有数据看起来都很好(当然,如果我不在java中更改编码,java控制台除外)。“你能向服务器发出内部更新的命令吗?”我想这是问题的要点。不,除了
eval()
之外,你真的不能这样做,你真的应该小心处理。当然,这需要能够用JavaScript进行代码页转换,祝你好运!所以,也许有可能,但继续做你正在做的事情肯定更安全。