我有一string,是gbk格式,想把他转换成utf8格式还有个问题,有没有什么函数或办法,可以判断某一string是什么格式,或者告诉我,是不是gbk或utf8,或者都不是

解决方案 »

  1.   

    gbk不是一个标准的编码,只是win 9x时的一种过渡型,现在已经是gb18030了。转换都是通过 非unicode -> unicode -> utf-8
    判断字符串是什么编码的一般都基于统计,所以也很难说判断的怎么样。比如著名的在记事本里写“联通”,再打开就乱码的“bug”,就是notepad认为它是两个utf-8的字符(刚好这两个gb2312/gb18030的字符也符合utf-8的编码)
      

  2.   

    先强制类型转换成WideString,然后调用UTF8Encode
      

  3.   

    var
      strGBK: AnsiString;
      strUTF8: AnsiString;
      strUTF16: WideString;
    begin
      StrGBK := #$B2#$E2#$CA#$D4;//'测试'
      SetLength(strUTF16, Length(strGBK));
      SetLength(strUTF16,MultiByteToWideChar(936,0,PAnsiChar(strGBK), Length(strGBK),PWideChar(strUTF16),Length(strUTF16)));
      strUTF8 := UTF8Encode(strUTF16)
    end;