很多人遇到这个问题,就是奇数个转码为UTF-8格式后,转换回来就出问题。
我用delphi2007也遇到这种情况,delphi自带的widestringtoUTF8遇到奇数汉字直接返回空值。用windows自带的转换函数会丢掉最后一个汉字。
原因是UTF-8的汉字每个都是三个字节,奇数个汉字就是奇数个字节,而转码时每次是处理两个字节,这样就会剩下一个字节,这个字节会被置为‘?’。
网上有很多解决方法,我的方法是在汉字串后(无论奇偶)插入一个生僻全角字符,如‘#’,,在转换回来时在切去这个字符,解决了问题。