Golang mgo MongoDB bson.ObjectId非utf-8错误

Golang mgo MongoDB bson.ObjectId非utf-8错误,mongodb,utf-8,go,mgo,Mongodb,Utf 8,Go,Mgo,我正在使用mongo和mgo驱动程序在Mac上开发go 在我的Mac上一切都很好。当我的朋友在他的windows机器上使用相同的代码库时,我们会得到这些奇怪的非utf-8 bson.objectid 以下是mongolab.com(一个托管的mongo服务器)的屏幕截图 我的代码只是使用: thing.Id = bson.NewObjectId() thing.eventId = event.Id 有人有这个问题吗?有人知道怎么处理吗 编辑:此代码库中使用的所有bson函数为: thing

我正在使用mongo和mgo驱动程序在Mac上开发go

在我的Mac上一切都很好。当我的朋友在他的windows机器上使用相同的代码库时,我们会得到这些奇怪的非utf-8 bson.objectid

以下是mongolab.com(一个托管的mongo服务器)的屏幕截图

我的代码只是使用:

thing.Id = bson.NewObjectId() 
thing.eventId = event.Id
有人有这个问题吗?有人知道怎么处理吗

编辑:此代码库中使用的所有bson函数为:

thing.Id = bson.NewObjectId()
thing.Id = bson.ObjectIdHex(id)
idString = thing.Id.Hex()

谢谢。

屏幕截图中的Unicode替换字符表明应用程序将对象ID视为UTF-8编码文本。对象ID包含二进制数据,而不是UTF-8编码的文本

使用该方法将对象id转换为人类可读的文本


用于将十六进制字符串表示形式转换回对象id。请小心使用保护对ObjectDhex的调用

也许utf-8不是我的问题。当我使用mac时,上面的快照将显示所有人类可读的字符。在windows机器上创建/使用对象时,我们会看到这些奇怪的字符。这是mongolab网站上的内容。很明显,他们使用Go字符串作为字节的集合,因此如果试图按原样打印(例如,没有%x或%q格式),我希望输出“有趣的”。这很完美(尽管通常你会看到使用
[]字节
,但使用
字符串
的优点是它是只读的)。如果我是他们,并且我想使用底层字符串类型,我会制作一个自定义的
类型ObjectIDType字符串
(但名称更好)为了更清楚地说明它不是一个普通字符串。@DaveC They.@ThunderCat d'oh,我读得太快了,忽略我的第二条注释:^)请显示_id和eventId字段的类型声明。您如何将
thing.eventId
字段写入数据库?BSON编码器忽略了
eventId
字段,因为该字段未导出。是否对该问题进行了排序?我想我也遇到了同样的问题,我朋友的windows系统上的mgo版本已经过时了。