如标题,开发的iOS APP在接受用户端输入的时候,再显示在用户端时,这些字符不能显示。 在web管理端,能看到这些字符被显示成说游 这样的[obj]形式, 到底是什么问题呢?
于是将情况问了ChatGPT。
问ChatGPT无解
按GPT的回答,数据库那里是没有设置错的。其它的就没有得到什么有用的信息了。
那我就先确认一下iOS端的字符集有没有设置对吧,但是按照gpt的提示没找到。gpt有时真的还挺扯淡的。
自己想办法从环节中窥探
只能自己想办法了,拆分法。可以在接口处看下用户的输入是不是正确的。我也不知道正确否, 先log出来看看吧。既然是utf8编码,那么就log最原始的形式,将字符串输出为16进制的形式。
这会是copilot帮上忙了
它直接给我提示用hex.EncodeToString()来输出编码。那么验证一下,go输出的这个编码,可以转换回用户输入的文字吗?于是我拿这个问了刚刚放开的bing chat
先拿个简单的“你好”找AI验证一下 hex.EncodeToString可以帮助分析字符编码
(原谅我的粗鲁, 我想复制转换的e4bda0e5a5bd
的时候,鼠标移上去就给我点链接,让我很不爽。可替换的交互方法是我按个Ctrl或者Option键再给我点击链接?)
这只是bingchat的回答, 我再问多一个吧,于是去问GPT。得到的答案是肯定的
放到生产环境
有了上面的验证,那么便修改接口,发布到生产环境。
生产环境上的日志
[UserName= Nicholas🆒🔥🌶️🍆🥭🍓 UserNameHex= 4e6963686f6c6173f09f8692f09f94a5f09f8cb6efb88ff09f8d86f09fa5adf09f8d93] 这个是我的测试数据。(发现iTerm2也可以正确显示emoji的)
找AI问一下。
问了bingchat也是这样, 同一水路的原因?
中间还有点啼笑皆非,可能是我的问的方式不对吧。 总之感觉bingchat 不能很好理解我的意图,不如ChatGPT。
这个emoji的差异怎么来的, 我就不清楚了。不过ChatGPT总是能很好地认错。
未完待续
目前为止,问题还未解决, 我还未能复现到出问题的字符。 先抓到出问题的实际数据看看。
抓到了实际数据
cnName= 商人交换 cnNameHex= efbfbcefbfbce59586e4babae4baa4e68da2efbfbcefbfbc
查了一下efbfbc这个是utf8代表不可识别的替换符号。参考www.fileformat.info/info/unicod…
也就是说,至少在接口前面就出现问题了。