汉字转unicode

时间:2024-04-08 20:54:20编辑:奇事君

怎样用C语言实现汉字和ASCII码到UNICODE码的转换?

用MultiByteToWideChar和WideCharToMultiByte可以做到编码的转换。MultiByteToWideChar是一个windows API 函数,该函数映射一个字符串到一个宽字符(unicode)的字符串。函数原型:int MultiByteToWideChar(UINT CodePage,DWORD dwFlags,LPCSTR lpMultiByteStr,int cchMultiByte,LPWSTR lpWideCharStr,int cchWideChar);参数:CodePage:指定执行转换的字符集,这个参数可以为系统已安装或有效的任何字符集所给定的值。你也可以指定其为下面的任意一值:CP_ACP:ANSI字符集;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;CP_SYMBOL:符号字符集(42);CP_THREAD_ACP:当前线程ANSI代码页;CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。dwFlags:一组位标记用以指出是否未转换成预作或宽字符(若组合形式存在),是否使用象形文字替代控制字符,以及如何处理无效字符。你可以指定下面是标记常量的组合,含义如下:MB_PRECOMPOSED:通常使用预作字符——就是说,由一个基本字符和一个非空字符组成的字符只有一个单一的字符值。这是缺省的转换选择。不能与MB_COMPOSITE值一起使用。MB_COMPOSITE:通常使用组合字符——就是说,由一个基本字符和一个非空字符组成的字符分别有不同的字符值。不能与MB_PRECOMPOSED值一起使用。MB_ERR_INVALID_CHARS:如果函数遇到无效的输入字符,它将运行失败,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。MB_USEGLYPHCHARS:使用象形文字替代控制字符。组合字符由一个基础字符和一个非空字符构成,每一个都有不同的字符值。每个预作字符都有单一的字符值给基础/非空字符的组成。在字符è中,e就是基础字符,而重音符标记就是非空字符。函数的缺省动作是转换成预作的形式。如果预作的形式不存在,函数将尝试转换成组合形式。标记MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而标记MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS则不管其它标记如何都可以设置。lpMultiByteStr:指向将被转换字符串的字符。cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。如果lpMultiByteStr指定的字符串以空字符终止,可以设置为-1(如果字符串不是以空字符中止,设置为-1可能失败,可能成功),此参数设置为0函数将失败。lpWideCharStr:指向接收被转换字符串的缓冲区。cchWideChar:指定由参数lpWideCharStr指向的缓冲区的宽字符个数。若此值为零,函数返回缓冲区所必需的宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。返回值:如果函数运行成功,并且cchWideChar不为零,返回值是由lpWideCharStr指向的缓冲区中写入的宽字符数;如果函数运行成功,并且cchWideChar为零,返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。如果函数运行失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。它可以返回下面所列错误代码:ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。WideCharToMultiByte,该函数映射一个unicode字符串到一个多字节字符串。函数原型:int WideCharToMultiByte(UINT CodePage, //指定执行转换的代码页DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE);参数:CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。你也可以指定其为下面的任意一值:CP_ACP:ANSI代码页;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;CP_SYMBOL:符号代码页(42);CP_THREAD_ACP:当前线程ANSI代码页;CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换返回值:如果函数运行成功,并且cchMultiByte不为零,返回值是由 lpMultiByteStr指向的缓冲区中写入的字节数;如果函数运行成功,并且cchMultiByte为零,返回值是接收到待转换字符串的缓冲区所必需的字节数。如果函数运行失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。它可以返回下面所列错误代码:ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。注意:指针lpMultiByteStr和lpWideCharStr必须不一样。如果一样,函数将失败,GetLastError将返回ERROR_INVALID_PARAMETER的值。 Windows CE:不支持参数CodePage中的CP_UTF7和CP_UTF8的值,以及参数dwFlags中的WC_NO_BEST_FIT_CHARS值。

C语言中如何输出unicode编码

Unicode编码 在计算机科学领域中,Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以呈现世界上数十种文字的系统。Unicode是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)对外发表。Unicode包含了超过十万个字符(在2005年,Unicode的第十万个字符被采纳且认可成为标准之一)、一组可用以作为视觉参考的代码图表、一套编码方法与一组标准字符编码、一套包含了上标字、下标字等字符特性的列举等。 Unicode的编码方式与ISO 10646的通用字符集(Universal Character Set,UCS)概念相对应,目前实际应用的Unicode版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示216即65536个字符。基本满足各种语言的使用。实际上目前版本的Unicode尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。C++处理Unicode编码为了处理Unicode编码C++为每个字符处理函数提供了宽字符(wchar_t)处理函数。在ANSI/ISO 9899--1990也就是美国国家为程序设计语言C指定的标准(也称为ANSI C)中是这样定义的:用多个字节来代表的字符称之为宽字符,而Unicode只是宽字符编码的一种实现,宽字符并不一定是Unicode。C语言中输出unicode编码可以是用宽字符输出函数。下面是宽字符常用的输入输出函数表:打印和扫描字符串: 宽字符函数 描述 fprintf()/fwprintf() 使用vararg参量的格式化输出 fscanf()/fwscanf() 格式化读入 printf() 使用vararg参量的格式化输出到标准输出 scanf() 从标准输入的格式化读入 sprintf()/swprintf() 根据vararg参量表格式化成字符串 sscanf() 以字符串作格式化读入 vfprintf()/vfwprintf() 使用stdarg参量表格式化输出到文件 vprintf() 使用stdarg参量表格式化输出到标准输出 vsprintf()/vswprintf() 格式化stdarg参量表并写到字符串输入和输出: 宽字符函数 普通C函数 描述 fgetwc() fgetc() 从流中读入一个字符并转换为宽字符 fgetws() fgets() 从流中读入一个字符串并转换为宽字符串 fputwc() fputc() 把宽字符转换为多字节字符并且输出到标准输出 fputws() fputs() 把宽字符串转换为多字节字符并且输出到标准输出串 getwc() getc() 从标准输入中读取字符, 并且转换为宽字符 getwchar() getchar() 从标准输入中读取字符, 并且转换为宽字符 None gets() 使用fgetws() putwc() putc() 把宽字符转换成多字节字符并且写到标准输出 putwchar() putchar() 把宽字符转换成多字节字符并且写到标准输出 None puts() 使用fputws() ungetwc() ungetc() 把一个宽字符放回到输入流中

Unicode 编码转换器怎么使用

  Unicode编码,是一种文件储存时使用的储存编码,由0x000000至0xFFFFFFF的十六进制数字序列组成,能够表示世界上大多数的语言文字。
  Unicode转换器,是用于将文字和Unicode代码互相转换的工具,能够很快地将两者相互转换,便于研究文件编码方式。
  一般的用户可能不需要此类工具,但是在访问某些Unicode网站时可能需要进行代码转换,此时可以进行设置。在浏览器的菜单中点击“查看”-“编码设置”,选中“UTF-8(Unicode)”项目即可将当前网页以Unicode编码方式呈现。


VB编程中如何将UTF-8和Unicode互相转换?

'Utf8 转换为 UnicodePublic Function UTF8_Decode(ByVal s As String) As StringDim lUtf8Size As LongDim sBuffer As StringDim lBufferSize As LongDim lResult As LongDim b() As ByteIf LenB(s) ThenOn Error GoTo EndFunctionb = StrConv(s, vbFromUnicode)lUtf8Size = UBound(b) + 1On Error GoTo 0'Set buffer for longest possible string i.e. each byte is'ANSI<=&HFF, thus 1 unicode(2 bytes)for every utf-8 character.lBufferSize = lUtf8Size * 2sBuffer = String$(lBufferSize, vbNullChar)'Translate using code page 65001(UTF-8)lResult = MultiByteToWideChar(CP_UTF8, 0, b(0), _lUtf8Size, StrPtr(sBuffer), lBufferSize)'Trim result to actual lengthIf lResult ThenUTF8_Decode = Left$(sBuffer, lResult)'Debug.Print UTF8_DecodeEnd IfEnd IfEndFunction:End Function'Unicode转换为UTF-8.Public Function UTF8_Encode(ByVal strUnicode As String) As String 'ByVal strUnicode As ByteDim TLen As LongTLen = Len(strUnicode)If TLen = 0 Then Exit FunctionDim lBufferSize As LongDim lResult As LongDim b() As Byte'Set buffer for longest possible string.lBufferSize = TLen * 3 + 1ReDim b(lBufferSize - 1)'Translate using code page 65001(UTF-8).lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(strUnicode), _TLen, b(0), lBufferSize, vbNullString, 0)'Trim result to actual length.If lResult ThenlResult = lResult - 1ReDim Preserve b(lResult)UTF8_Encode = StrConv(b, vbUnicode)End IfEnd Function


上一篇:延安西路900号

下一篇:游戏卡盟