还有个问题,有没有什么函数或办法,可以判断某一string是什么格式,或者告诉我,是不是gbk或utf8,或者都不是
5 个解决方案
#1
gbk不是一个标准的编码,只是win 9x时的一种过渡型,现在已经是gb18030了。转换都是通过 非unicode -> unicode -> utf-8
判断字符串是什么编码的一般都基于统计,所以也很难说判断的怎么样。比如著名的在记事本里写“联通”,再打开就乱码的“bug”,就是notepad认为它是两个utf-8的字符(刚好这两个gb2312/gb18030的字符也符合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的编码)
判断字符串是什么编码的一般都基于统计,所以也很难说判断的怎么样。比如著名的在记事本里写“联通”,再打开就乱码的“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;