Delphi 编码转换 Unicode gbk big5(使用LCMapString设置区域后,再用API转换)

原文:http://blog.dream4dev.com/article.asp?id=17

function UnicodeEncode(Str: string; CodePage: integer): WideString;
var
 Len: integer;
begin
 Len := Length(Str) + 1;
 SetLength(Result, Len);
 Len := MultiByteToWideChar(CodePage, 0, PChar(Str), -1, PWideChar(Result), Len);
 SetLength(Result, Len - 1); //end is #0
end;

function UnicodeDecode(Str: WideString; CodePage: integer): string;
var
 Len: integer;
begin
 Len := Length(Str) * 2 + 1; //one for #0
 SetLength(Result, Len);
 Len := WideCharToMultiByte(CodePage, 0, PWideChar(Str), -1, PChar(Result), Len, nil, nil);
 SetLength(Result, Len - 1);
end;

function Gb2Big5(Str: string): string;
begin
 SetLength(Result, Length(Str));
 LCMapString(GetUserDefaultLCID, LCMAP_TRADITIONAL_CHINESE,
 PChar(Str), Length(Str),
 PChar(Result), Length(Result));
 Result := UnicodeDecode(UnicodeEncode(Result, 936), 950);
end;

function Big52Gb(Str: string): string;
begin
 Str := UnicodeDecode(UnicodeEncode(Str, 950), 936);
 SetLength(Result, Length(Str));
 LCMapString(GetUserDefaultLCID, LCMAP_SIMPLIFIED_CHINESE,
 PChar(Str), Length(Str),
 PChar(Result), Length(Result));
end;

function Utf8Encode(const WS: WideString): UTF8String;
var
 L: Integer;
 Temp: UTF8String;
begin
 Result := ‘;
 if WS = ‘ then Exit;
 SetLength(Temp, Length(WS) * 3); // SetLength includes space for null terminator
 L := UnicodeToUtf8(PChar(Temp), Length(Temp) + 1, PWideChar(WS), Length(WS));
 if L > 0 then
 SetLength(Temp, L - 1)
 else
 Temp := ‘;
 Result := Temp;
end;

http://www.vckbase.com/module/articleContent.php?id=4387

时间: 2024-09-30 12:01:39

Delphi 编码转换 Unicode gbk big5(使用LCMapString设置区域后,再用API转换)的相关文章

ANSI, UTF-8, Unicode, GBK, GB2312 字符编码小结

这两天碰见一个Bug,涉及到字符编码,一通乱搜后,索性研究了下,整理出来,以便今后查阅. ASCII码,0~127,128个,这个就不用多说了,他是计算机文明的基石.但是这里面只有英文字母,其他国家如何把本国的文字输入到电脑中呢?所以基本每种语言都有自己的字符集,如汉字就有GB2312(简体中文),BIG5(繁体中文)等等. 但不同的ANSI编码在不同语言之间是不兼容的,所以对于不同的操作系统之间文件的传输,或者在同样的操作系统下,源文件语言不同于OS的语言文件的传输,需要转换成UTF-8格式.

聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)

作为一个程序员,一个中国的程序员,想来“乱码”问题基本上都遇到过,也为之头疼过.出现乱码问题的根本原因是编码与解码使用了不同而且不兼容的“标准”,在国内一般出现在中文的编解码过程中. 我们平时常见的编码有Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等,弄清这些编码之间的关系,就不难理解“乱码”出现的原因以及解决办法. 所谓字符集编码其实就是将字符(包括英文字符.特殊符号,控制字符,数字,汉子等)与计算机中的一个数字(二进制存储)一一对应起来,用这个数字来表示该字符

FATFS外置UNICODE GBK双向转换码表(转)

源:FATFS外置UNICODE GBK双向转换码表 将UtoG,GtoU双向码表放到存储卡里面实现长文件名,因为FATFS长文件名需要unicode支持, 首先将UtoG.sys,GtoU.sys两个文件放到SD卡根目录,注意,一定要在根目录,并且是短文件名,因为长文件名需要UNICODE支持,此时的FATFS还是不支持长文件名的,但是当初始化UNICODE码表后就可以支持长文件名了. 两个码表下载地址:http://download.csdn.net/detail/cp1300/552673

中文转换成Unicode编码 和 Unicode编码转换为中文

前几天,遇到一个问题,就是在浏览器地址栏传递中文时,出现乱码,考虑了一下,解决方式有很多,我还是采用了转换编码的方式,将中文转换为Unicode编码,然后再解码成中文,以下是实现的过程,非常简单! package cy.code; public class CyEncoder { private String zhStr; //中文字符串 private String unicode;//将中文字符串转换为Unicode编码 存储在这个属性上. public CyEncoder(String z

python入门:UTF-8转换成GBK编码

1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #UTF-8转换成GBK编码 4 #temp(临时雇员,译音:泰坡) 5 #decode(编码,译音:迪口德) 6 #encode(编码,译音:因口德) 7 #原理就是爸UTF-8转换成万国码,再给万国码进行编码转换成GBK,在python 2.x里面这么用 8 """ 9 给变量temp赋值等于'李杰'是UTF-8编码! 10 变量temp_unicode的赋值等于temp

C++转换unicode utf-8 gb2312编码

windows开发环境下用VC++6.0 对unicode .utf-8. gb2312 三种编码格式之间的转换方法: [cpp] view plaincopy #include <iostream> #include <string> #include <Windows.h> using namespace std; void unicodeToUTF8(const wstring &src, string& result) { int n = Wid

UNICODE GBK UTF-8等文本编码(个人理解)

1.对编码的个人理解 一类是ASCII码,学C语言时接触到的,只能编码基本字符: 另外就是ANSI编码和UNICODE编码,这两类是编码标准,他有多种实现(就像H264标准一样). 对于ANSI编码标准,简体中文对其实现有GBK, GB2312, GB18030 等编码(就像AVC一样,是H264标准的一种实现),繁体中文,日文有其他编码实现. 对于UNICODE编码标准,是国际通用编码,具体实现有 UTF-16 UTF-16LE UTF-16BE UCS-2 UTF-8等. win8与ubut

UTF-8编码与Unicode CS2的转换

/* Convert a UTF-8 string into a UCS-2 array. */ void tcstrutftoucs(const char *str, uint16_t *ary, int *np){ assert(str && ary && np); const unsigned char *rp = (unsigned char *)str; unsigned int wi = 0; while(*rp != '\0'){ int c = *(unsi

字符编码(续)---Unicode与ANSI字符串转换以及分辨字符编码形式

Unicode与ANSI字符串转换 我们使用windows函数MultiByteToWideChar将多字节字符串转换为宽字符字符串,如下: int MultiByteToWideChar( UINT uCodePage, DWORD dwFlags, PCSTR pMultiByteStr, int cbMultiByte, PWSTR pWideCharStr, int cchWideChar); uCodePage参数标识了与多字节字符串关联的一个代码页值.dwFlags参数允许我们进行额