怎么把gbk的字符串转换成utf8格式的?

时间:2022-03-24 22:42:32
我有一string,是gbk格式,想把他转换成utf8格式

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

5 个解决方案

#1


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

#2


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

#3


还是不行哟,有没有例子啊?发个例子我看看好不?

#4


还是不行哟,有没有例子啊?发个例子我看看好不?

#5


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;

#1


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

#2


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

#3


还是不行哟,有没有例子啊?发个例子我看看好不?

#4


还是不行哟,有没有例子啊?发个例子我看看好不?

#5


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;