• Delphi编码转换


    1、Delphi 的 Utf-8 转换 - findumars - 博客园.html

    https://www.cnblogs.com/findumars/archive/2013/12/26/3492891.html

    新版的 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

    2、

    3、

  • 相关阅读:
    20155330 2016-2017-2《Java程序设计》课程总结
    20155330 实验五 网络编程与安全 实验报告
    20155330 实验四 Android程序设计
    20155330 课堂测试 20170517
    20155330 实验三 敏捷开发与XP实践
    20155330 第十一周课堂练习(20170503)
    20155330 2016-2017-2 《Java程序设计》第十周学习总结
    20155330 2016-2017-2 《Java程序设计》第九周学习总结
    2017-2018-1 20155329 《信息安全系统设计基础》第13周学习总结
    2017-2018-1 20155329 实验五 通讯协议设计
  • 原文地址:https://www.cnblogs.com/CodeSkill/p/8093318.html
Copyright © 2020-2023  润新知