WindowsPhone的中文GB2312、GBK编码与Unicode相互转换

网上有高人做的GB2312与Unicode相互转换的类或者程序集,大家去找找看。但是GB2312是比较老的标准,覆盖汉字6763个和非汉字图形字符682个。不是太够用,只能用GBK(覆盖汉字21003个、符号883个)。但找了老半天,网上没有现成的GBK与Unicode相互转换的程序集。遂,只能自己写了,现无私分享给大家。

思路:首先明确一点:Unicode只兼容ASCII码。所以,没有任何算法函数能表示GBK和Unicode的相互关系。那怎么办嘞?操作系统不是可以转换么?它是用得什么办法。就是最蛋疼的查表法。说的明白一点GBK转Unicode就是用数组的下标表示GBK的编码,用数组的值表示Unicode的编码。这就一一对应了。反之Unicode转GBK亦然,大家自己去思考。

 

  一.GBK编码是双字节(16bit),也就是说能表示2的16次方(65535)个编码,而GBK的所覆盖的字符只有21886。做简单的方法就是弄个65535大小的数组,其中零零散散地分布着21886个有效GBK字符编码,这太浪费资源了。需进行适当优化。

  接下来,请看,GBK中第一个中文字符编码为十六进制0x8140,最后一个编码为0xFEFE。0xFEFE-0x8140+0x0001=0x7DBF=32191。好了,缩减了区间,大约就是大小为32191的数组零零散散的分布着21886个有效GBK字符编码。所需空间减少了一半。但是还浪费了大约10000左右的空间,但是没办法了GBK编码太零散了。优化到这一步GBK转Unicode编码就完啦。

  二.Unicode编码也是双字节,首先,Unicode编码只兼容ASCII编码,与其他编码完全不兼容。且,Unicode编码中把中文简体、繁体、日语、韩语列在同一大块区域。没有规律。完全找不到Unicode中文字符和GBK中文字符之间的函数映射。遂,也只能用查表法。

  最简单的像上文那样弄个大小为65535的数组,当然也是浪费空间,也需要优化。GBK中的那些中文字符零散地分布在Unicode编码中6大块区域

。分别为

  //0x00A4--0x0451    942   个编码位零散分布着157 个Unicode编码的中文字符
  //0x2010--0x2642    1587 个编码位零散分布着289 个Unicode编码的中文字符
  //0x3000--0x33D5    982   个编码位零散分布着270 个Unicode编码的中文字符
  //0x4E00--0x9FA5    20902个编码位零散分布着20902个Unicode编码的中文字符
  //0xE7C7--0xE864    158   个编码位零散分布着95 个Unicode编码的中文字符
  //0xF92C--0xFFE5     1722 个编码位零散分布着173 个Unicode编码的中文字符

大家自己计算一下,这样一优化下来,只需要一个大小为26293的数组零散地分布着21886个有效中文字符。

 

下载: GBK与Unicode互换

文件在上面的链接里,大家要是想拿去项目中用的话,那需要注意GBKToUnicode.txt和UnicodeToGBK.txt的路径。

还有一点,我的代码是在开发WindowsPhone的基础上写的。其中加载文件的代码在其他平台不适用。

貌似转换性能也不太好,以后在优化。

至于说到GB2312与Unicode之间的相互转换,GBK编码向下兼容GB2312编码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
### 回答1: 易语言作为一种比较流行的编程语言,在编码过程中有时需要对编码进行转换,其中GB2312和UTF-8都是常见的编码方式。以下是易语言GB2312UTF-8编码的教学过程。 首先,我们需要先创建一个易语言工程,并添加主程序和界面程序。然后,在界面程序中添加一个按钮和一个编辑框,按钮上设置“转换”文字。接着,我们需要在按钮的单击事件中添加相关的代码。 在代码中,我们先获取编辑框中的文本,然后使用gb2utf8函数进行编码转换。具体操作如下: 1. 在“眼睛”选项卡中勾选“不编译主程序全局变量”。 2. 在“编译”选项卡中勾选“添加tu2f8文件”。 3. 在按钮单击事件中添加以下代码: ``` 编辑框内容 = 界面信息框内容读取(1, 1); 编码转换结果 = gb2utf8(编辑框内容); 界面信息框内容清空(2, 1); 界面信息框内容输出(2, 1, 编码转换结果); ``` 其中,编辑框内容为原始文本,界面信息框用于输出转换后的结果。 4. 添加模块tu2f8.txt并添加以下代码: ``` //模块名称:tu2f8 //作者:youngsterxyf //介绍:GB2312UTF-8编码 //版本:1.0 def gb2utf8(GBString): t = GBString.split(CHR(0)+CHR(0)) if len(t) > 1: t0 = t.pop(0) return t0 + CHR(0) + CHR(0) + ''.join([chr(b) for b in bytes(t[0], 'gb2312')]).encode('utf-8').decode() else: return ''.join([chr(b) for b in bytes(GBString, 'gb2312')]).encode('utf-8').decode() ``` 以上就是易语言GB2312UTF-8编码的教学过程,大家可以自行尝试编写并练习。注意,以上代码仅作为演示,具体实现还需要按照自己的需求进行修改。 ### 回答2: 简单来说,将易语言采用的gb2312编码转换为utf8编码,可以分为以下几个步骤: 第一步,将gb2312编码转换Unicode编码。在易语言中,可以使用Str.UnicodeToStr函数实现转换,例如: UnicodeCode = Str.UnicodeToStr(GBCode, "gb2312") 这里的GBCode就是原始的gb2312编码字符串,UnicodeCode则是转换后的Unicode编码字符串。 第二步,将Unicode编码转换为utf8编码。同样地,使用Str.UnicodeToUTF8函数可以实现转换,例如: UTF8Code = Str.UnicodeToUTF8(UnicodeCode) 这里的UnicodeCode就是第一步转换后得到的Unicode编码字符串,UTF8Code则是转换后的utf8编码字符串。 第三步,将utf8编码重新写入文件。由于utf8编码是一种多字节编码方式,所以要使用二进制方式打开文件,并写入转换后的utf8编码数据。使用EasyFile对象可以方便地实现这一过程,例如: File.Open(EasyFilePath, fmOpenWrite or fmShareExclusive or fmShareDenyNone) File.Seek(0, fssoFromEnd) File.Write(UTF8Code) File.Close() 这里的EasyFilePath就是要写入的文件路径,fmOpenWrite指示以写方式打开文件,fmShareExclusive指示以独占方式共享文件,fmShareDenyNone指示不限制其他进程或线程的访问权限,File.Write函数则将转换后的utf8编码数据写入文件。 通过以上几个步骤,就可以将原始的gb2312编码字符串转换为utf8编码字符串,并写入文件中。需要注意的是,在进行编码转换时,需要确保原始数据的编码方式正确,否则会产生转换错误或乱码等问题。 ### 回答3: 易语言是一种高级编程语言,可以用来开发Windows系统下的应用程序。它的编码方式分为两种:gb2312和utf-8。 gb2312中文字符集,最多可以表示6763个汉字和682个非汉字字符。utf-8则是一种Unicode编码格式,它支持全球各地的语言,包括中文。 在易语言中将gb2312转换为utf-8编码可以使用以下方法: 1. 打开易语言软件,创建一个新的工程,并打开主模块。 2. 在主模块中新增一个按钮,以便触发转换操作。 3. 在按钮的单击事件中,编写代码以便将gb2312转换为utf-8编码。 4. 代码中需要使用相关的函数,如“gbktoUtf8”函数和“mbslen”函数等。 例如,在单击事件代码中,可以使用以下代码: procedure Button1_OnClick; var   str: string;   len: integer; begin   str := '易语言编程';   len := mbslen(str);   SetLength(str, len + 1);   gbktoUtf8(PChar(str));   Messagebox('转换后的字符串为:' + str); end; 5. 在运行程序后,点击按钮会将gb2312编码的字符串转换为utf-8编码,并将转换后的字符串显示在消息框中。 总之,易语言gb2312utf8编码需要借助相关的函数和代码来实现。如果了解相关的函数和编码知识,便可以轻松完成这个任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值