搜索
bottom↓
回复: 21

请问用51单片机怎么将unicode码转换成GB2312码?

[复制链接]

出0入0汤圆

发表于 2013-7-16 12:01:16 | 显示全部楼层 |阅读模式
我现在要用到GB2312码,不过串口的数据是U码,现在涉及到将U码转化成GB码的问题。

在网上查了一些资料,有的是用查表的方法得到的,但是在51单片机中的可行度好像不大,因为那个映射表的数组非常庞大

请问各位大神是怎么做到的,将U码转化成GB码,有现成的芯片吗?或提供下程序,不胜感激~~~

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-7-16 12:03:04 | 显示全部楼层
望大家帮忙。。。

出0入0汤圆

发表于 2013-7-16 13:14:49 | 显示全部楼层
UNICODE转GBK 映射表有128K, 可以的话, 找个SPI FLASH存~

出0入93汤圆

发表于 2013-7-16 14:01:53 | 显示全部楼层
映射方式不是顺序映射的,只能查表。
要速度快就以Unicode作为基础做一个大表,占用Flash 128K。
要占用Flash小就以GB2312为基础做一个表,占用大概Flash 15K,再挨个搜索。
想再小一点就把GB2312后面的二级汉字单独提取出来做个小表,存储差分后的Unicode编码,按差分后每个占用1字节计,占用Flash大约11K。
更小一点,直接把二级汉字干掉,只占大约7K的Flash空间,超出部分全部用XXX代替,哈哈。

出1070入962汤圆

发表于 2013-7-16 14:04:35 | 显示全部楼层
既然51内部放不下,外部还要扩展FLASH,就不如用个国通的GT21系列的字库芯片,里边可以直接进行GB2312与UNICODE进行转换,I2C接口的很方便。

出0入0汤圆

发表于 2013-7-16 14:10:17 | 显示全部楼层
如果只是转其中一个很小的子集,比如英文用51还能做,如果是全转51就太吃力了,换stm32吧。

出0入0汤圆

发表于 2013-7-16 14:37:03 | 显示全部楼层
iconv是开源的可参考http://www.gnu.org/software/libiconv/,里面有一大堆如gb2312.h,gbk.h一类的头文件,正如你所说里面有很多很大的数组,用于查表,可以把这些源文件拿编译出来,放到SD卡或flash存储芯片中,通过SPI接口进行查表操作进行转换!

出0入0汤圆

发表于 2013-7-18 08:50:17 | 显示全部楼层
強的單片機                   應該可以做到的

出0入0汤圆

发表于 2013-7-18 15:21:10 | 显示全部楼层
基本上都得查表,51里没有什么函数可以直接转换的

出0入0汤圆

发表于 2013-7-18 16:34:52 | 显示全部楼层
本帖最后由 sheik 于 2013-7-18 16:36 编辑

Unicode转GB2312编码

出0入33汤圆

发表于 2013-7-18 16:40:09 | 显示全部楼层
从上位机想办法,不该单片机干的事一律不要给他干

出0入0汤圆

发表于 2013-7-19 11:45:26 | 显示全部楼层
查表吧....单片机够大就能用

出0入0汤圆

发表于 2013-7-19 13:09:46 | 显示全部楼层
好像有人用二分查表

出0入0汤圆

发表于 2013-7-19 13:24:18 | 显示全部楼层
参考FATFS中的CC936.C

出0入93汤圆

发表于 2013-7-19 13:29:15 | 显示全部楼层
只能查表吧

出0入0汤圆

发表于 2013-7-19 14:22:00 | 显示全部楼层
用字库芯片

出0入0汤圆

发表于 2013-7-19 15:36:27 | 显示全部楼层
用个AT45DB041.把那个二分表存入存储芯片。由单片机查找就好。我们就是这么弄地

出0入0汤圆

 楼主| 发表于 2013-7-20 15:34:21 | 显示全部楼层
Appcat 发表于 2013-7-16 14:04
既然51内部放不下,外部还要扩展FLASH,就不如用个国通的GT21系列的字库芯片,里边可以直接进行GB2312与UNI ...

我用的就是高通的字库芯片GT21H16S2Y,请问怎么用这块芯片怎么将UNICODE 转换 GB2312 ?可以给个程序或者具体说明吗?

出0入4汤圆

发表于 2013-7-20 16:27:06 | 显示全部楼层
本帖最后由 electricit 于 2013-7-20 16:29 编辑

论坛里有这个代码的,长度也就几行,用查表根本就是害人的

出0入4汤圆

发表于 2013-7-20 16:30:31 | 显示全部楼层
网上找的随便看,没测试

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. int H2D(char c){
  5. switch (toupper(c))
  6. {
  7.   case 'A': return 10;
  8.   case 'B': return 11;
  9.   case 'C': return 12;
  10.   case 'D': return 13;
  11.   case 'E': return 14;
  12.   case 'F': return 15;
  13. }
  14. return (c-'0');
  15. }

  16. unsigned short tbl[65535];
  17. void u2gb(unsigned char *u,unsigned char *gb){
  18. int i,j=0;
  19. unsigned char l,h;
  20. for(i=0;i<=strlen(u);){
  21.   l=u[i++];
  22.   h=u[i++];
  23.   if(l==0 && h==0) break;
  24.   if(l<0xA4 && h<=0){
  25.    gb[j++]=l;
  26.    continue;
  27.   }
  28.   gb[j++]=tbl[h*0x100+l]/0x100;
  29.   gb[j++]=tbl[h*0x100+l]%0x100;
  30. }
  31. gb[j++]=0;
  32. }

  33. int init_u2gb(){
  34. FILE *fd;
  35. int size;
  36. char buffer[10];
  37. memset(tbl,'\0',sizeof(tbl));
  38. fd = fopen("code1.txt","r");
  39. if(fd==NULL) return -1;
  40. while(!feof(fd)){
  41.   fread(buffer,sizeof(buffer),1,fd);
  42.   tbl[H2D(buffer[0])*0x1000+H2D(buffer[1])*0x100+H2D(buffer[2])*0x10+H2D(buffer[3])] =
  43.    H2D(buffer[5])*0x1000+H2D(buffer[6])*0x100+H2D(buffer[7])*0x10+H2D(buffer[8]);
  44. }
  45. close(fd);
  46. return 0;
  47. }
  48. int main(int argc, char *argv[])
  49. {
  50. unsigned char u[150],gb[150];
  51. memset(u,'\0',sizeof(u));
  52. memset(gb,'\0',sizeof(gb));
  53. init_u2gb();
  54. strcpy(u,"0");
  55. strcat(u,"\0\0");
  56. u2gb(u,gb);
  57. printf("%s\n",gb);
  58. scanf("%s",u);
  59. }


复制代码

出1070入962汤圆

发表于 2013-7-22 09:44:38 | 显示全部楼层
def_2 发表于 2013-7-20 15:34
我用的就是高通的字库芯片GT21H16S2Y,请问怎么用这块芯片怎么将UNICODE 转换 GB2312 ?可以给个程序或者 ...

芯片的手册20~22页不就是互转的源代码吗?

出10入0汤圆

发表于 2015-1-16 10:25:14 | 显示全部楼层
现在用这个片子,显示出来的汉字总是缺胳膊少腿,搞死我了,还没整好
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 00:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表