各种转码
来源:互联网 发布:sql输入语句 编辑:程序博客网 时间:2024/06/07 05:42
新版的 Delphi 應該不用這麼麻煩, 據說只要直接在 AnsiString, WideString, UTF8String 之間 assign 時就會自動幫你做轉換 (沒用過, 不知道是不是真的這樣就可以).
不過... 還在用 Delphi 3/5, 所以... 只好自己來轉:
unit util_utf8;
interface
uses Windows;
type
UTF8String = AnsiString;
function AnsiToWide(const S: AnsiString): WideString;
function WideToUTF8(const WS: WideString): UTF8String;
function AnsiToUTF8(const S: AnsiString): UTF8String;
function UTF8ToWide(const US: UTF8String): WideString;
function WideToAnsi(const WS: WideString): AnsiString;
function UTF8ToAnsi(const S: UTF8String): AnsiString;
implementation
function AnsiToWide(const S: AnsiString): WideString;
var len: integer;
ws: WideString;
begin
Result:='';
if (Length(S) = 0) then
exit;
len:=MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, nil, 0);
SetLength(ws, len);
MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, PWideChar(ws), len);
Result:=ws;
end;
function WideToUTF8(const WS: WideString): UTF8String;
var len: integer;
us: UTF8String;
begin
Result:='';
if (Length(WS) = 0) then
exit;
len:=WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, nil, 0, nil, nil);
SetLength(us, len);
WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, PChar(us), len, nil, nil);
Result:=us;
end;
function AnsiToUTF8(const S: AnsiString): UTF8String;
begin
Result:=WideToUTF8(AnsiToWide(S));
end;
function UTF8ToWide(const US: UTF8String): WideString;
var len: integer;
ws: WideString;
begin
Result:='';
if (Length(US) = 0) then
exit;
len:=MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, nil, 0);
SetLength(ws, len);
MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, PWideChar(ws), len);
Result:=ws;
end;
function WideToAnsi(const WS: WideString): AnsiString;
var len: integer;
s: AnsiString;
begin
Result:='';
if (Length(WS) = 0) then
exit;
len:=WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, nil, 0, nil, nil);
SetLength(s, len);
WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, PChar(s), len, nil, nil);
Result:=s;
end;
function UTF8ToAnsi(const S: UTF8String): AnsiString;
begin
Result:=WideToAnsi(UTF8ToWide(S));
end;
end.
就是直接使用 win32 的 API 來處理.
PS. 舊的 VCL 只支援 Ansi, 所以... WideString 與 UTF8String (定義與 AnsiString 相同) 並沒有辦法正確的在 VCL 中顯示.
原文:
http://blog.teatime.com.tw/1/post/419
DelphiXE下String转PAnsiChar
很多资料只提到升迁到xe,而我们调用底版本c++开发的程序,是只能按Ansi操作的,所以需要反向转换。
var s:PansiChar;
s:=PansiChar(AnsiString('我我我我我'));//这样就能转换过来了,如果没有AnsiString转换一下,那就只能取到第一个字符
- 各种转码总结
- 各种转码
- java转码各种方法
- 收藏的C++各种转码
- VC下各种字节转码
- 字符串转换,各种编码格式各种转
- 各种码码
- 各种语言码
- 各种Linux错误码
- SQLSTATE各种状态码
- 各种http状态码
- 各种数据库连接代码(转)
- 各种 lightbox 实现(转)
- 【转】Linux各种信号
- String转各种数据类型
- [转] 各种数据类型转换
- (转)各种在线api
- 各种技术博客[转]
- qualcomm MDM9X07 Debugmode
- Drill 内存设置
- TensorFlow 用 tf.nn.conv2d 实现卷积操作
- @Resource和@Autowired的区别
- windows下JDK的下载和环境变量的配置
- 各种转码
- UIViewController视图跳转
- 新时代的英语(VR/AR/MR)
- clock()与GetTickCount()的区别与作用
- 用Maven创建第一个web项目
- 响应报文
- Thread的run()与start()的区别
- obc学习笔记4
- JNDI