从GB2312到Unicode转换表制作

stm32单片机平台上ASCII(GBK,GB2312)转unicode转UTF-8 问题来源 用stm32单片机接收APP发下来的汉字,并显示此汉字。 APP发下来的是UTF-8,转到服务器,因为mdk里面输入的汉字是ASCII(GBK,GB2312),所以需要服务器将UTF-8转成ASCII(GBK,GB2312)。 现在升级STM32单片机程序,发现需要UTF-8编码,APP和服务器最好不动,不然修改太大。 所以就出现了ASCII(GBK,GB2312)转unicode转UTF-8需求 以下ASCII(GBK,GB2312),统称为GBK,因为ASCII是GB2312子集,G 阅读详情

简体中文有两种常用编码:GB2312 和 Unicode. 它们的对应关系可以用
下面的程式所生成:

/**
 * GB2312Unicde.java
 * Copyright (c) 2003 by Dr. Herong Yang, http://www.herongyang.com/
 */
import java.io.*;
import java.nio.*;
import java.nio.charset.*;
class GB2312Unicde {
   static OutputStream out = null;
   static char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7',
                             '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
   static int b_out[] = {201,267,279,293,484,587,625,657,734,782,827,
      874,901,980,5590};
   static int e_out[] = {216,268,280,294,494,594,632,694,748,794,836,
      894,903,994,5594};
   public static void main(String[] args) {
      try {
         out = new FileOutputStream("gb2312.gb");
         writeCode();
         out.close();
      } catch (IOException e) {
         System.out.println(e.toString());
      }
   }
   public static void writeCode() throws IOException {
      boolean reserved = false;
      String name = null;
      // GB2312 is not supported by JDK. So I am using GBK.
      CharsetDecoder gbdc = Charset.forName("GBK").newDecoder();
      CharsetEncoder uxec = Charset.forName("UTF-16BE").newEncoder();
      CharsetEncoder u8ec = Charset.forName("UTF-8").newEncoder();
      ByteBuffer gbbb = null;
      ByteBuffer uxbb = null;
      ByteBuffer u8bb = null;
      CharBuffer cb = null;
      int count = 0;
      for (int i=1; i<=94; i++) {
         // Defining row settings
         if (i>=1 && i<=9) {
            reserved = false;
            name = "Graphic symbols";
         } else if (i>=10 && i<=15) {
            reserved = true;
            name = "Reserved";
         } else if (i>=16 && i<=55) {
            reserved = false;
            name = "Level 1 characters";
         } else if (i>=56 && i<=87) {
            reserved = false;
            name = "Level 2 characters";
         } else if (i>=88 && i<=94) {
            reserved = true;
            name = "Reserved";
         }
         // writing row title
         writeln();
         writeString("<p>");
         writeNumber(i);
         writeString(" Row: "+name);
         writeln();
         writeString("</p>");
         writeln();
         if (!reserved) {
            writeln();
            writeHeader();
           // looping through all characters in one row
            for (int j=1; j<=94; j++) {
               byte hi = (byte)(0xA0 + i);
               byte lo = (byte)(0xA0 + j);
               if (validGB(i,j)) {
                  // getting GB, UTF-16BE, UTF-8 codes
                  gbbb = ByteBuffer.wrap(new byte[]{hi,lo});
                  try {
                     cb = gbdc.decode(gbbb);
                     uxbb = uxec.encode(cb);
                     cb.rewind();
                     u8bb = u8ec.encode(cb);
                  } catch (CharacterCodingException e) {
                     cb = null;
                     uxbb = null;
                     u8bb = null;
                  }
               } else {
                  cb = null;
                  uxbb = null;
                  u8bb = null;
               }
               writeNumber(i);
               writeNumber(j);
               writeString(" ");
               if (cb!=null) {
                  writeByte(hi);
                  writeByte(lo);
                  writeString(" ");
                  writeHex(hi);
                  writeHex(lo);
                  count++;
               } else {
                  writeGBSpace();
                  writeString(" null");
               }
               writeString(" ");
               writeByteBuffer(uxbb,2);
               writeString(" ");
               writeByteBuffer(u8bb,3);
               if (j%2 == 0) {
                  writeln();
               } else {
                  writeString("   ");
               }
            }
            writeFooter();
         }
      }
      System.out.println("Number of GB characters worte: "+count);
   }
   public static void writeln() throws IOException {
      out.write(0x0D);
      out.write(0x0A);
   }
   public static void writeByte(byte b) throws IOException {
      out.write(b & 0xFF);
   }
   public static void writeByteBuffer(ByteBuffer b, int l)
      throws IOException {
      int i = 0;
      if (b==null) {
           writeString("null");
           i = 2;
      } else {
    for (i=0; i<b.limit(); i++) writeHex(b.get(i));
      }
      for (int j=i; j<l; j++) writeString("  ");
   }
   public static void writeGBSpace() throws IOException {
      out.write(0xA1);
      out.write(0xA1);
   }
   public static void writeString(String s) throws IOException {
      if (s!=null) {
         for (int i=0; i<s.length(); i++) {
            out.write((int) (s.charAt(i) & 0xFF));
         }
      }         
   }
   public static void writeNumber(int i) throws IOException {
      String s = "00" + String.valueOf(i);
      writeString(s.substring(s.length()-2,s.length()));
   }
   public static void writeHex(byte b) throws IOException {
      out.write((int) hexDigit[(b >> 4) & 0x0F]);
      out.write((int) hexDigit[b & 0x0F]);
   }
   public static void writeHeader() throws IOException {
      writeString("<pre>");
      writeln();
      writeString("Q.W. ");
      writeGBSpace();
      writeString(" GB   Uni. UTF-8 ");
      writeString("   ");
      writeString("Q.W. ");
      writeGBSpace();
      writeString(" GB   Uni. UTF-8 ");
      writeln();
      writeln();
   }
   public static void writeFooter() throws IOException {
      writeString("</pre>");
      writeln();
   }
   public static boolean validGB(int i,int j) {
      for (int l=0; l<b_out.length; l++) {
         if (i*100+j>=b_out[l] && i*100+j<=e_out[l]) return false; 
      }
      return true;
   }
}

探索GB2312与UNICODE转换方法及嵌入式系统实现 本文还有配套的精品资源,点击获取 简介:字符编码是IT领域文本数据处理的基础。本文详细解析GB2312和UNICODE这两种编码标准之间的转换过程,尤其关注嵌入式系统中的实现。GB2312是中国简体中文字符集,而UNICODE是一种国际通用字符集。转换通常需要使用转换表,因为它们的编码空间不同。嵌入式系统中,转换需要优化资源使用,提高速度,减少内存占用。源代码文件 ... 阅读详情

相关推荐

Unicode对应GBK编码范围详细整理

这是我整理了一星期,记过了好多测试、修改得出的结果,相信可以帮助在编写Unicode对应GBK编码的正则表达式的程序员一些帮助!

GB2312 Unicode转换表

源程序编辑软件将中文转化为GB2312编码,再下列的GB2312 Unicode转换表转为unicode。 实现2维数值,GB2312编码为递增,适合用二分法查找由GB2312码找Unicode码。 只含基本的汉字,符号未包括。 说明unit16 为16位的无符号整数unsigend short int #typedef  unsigned short int   u

瑞风轻拂 1万+

西瓜书第二章——模型评估与选择(十折交叉验证/查准查全F1)

第二章——模型评估与选择

xsddys的博客 953

C/C++中,GB2312转Unicode

    嵌入到多个系统编程时常常出现编码问题,特别是中文,并且对于国标GB2312来说,不像UTF-8那样可以用算法直接转为unicode(传说是这么说的,我也没试过),所以GB到Unicode只能是一对一的转换。以前碰到过GB转为Unicode的难题,在网上找到了源码,我只是修改了一下查找的代码,将查找算法改为二分查找。   主要函数为:unsigned int gb_uni(uns

letterb的专栏 2390

泛微E8流程监控指南:如何用SQL实时追踪审批节点状态?

本文详细介绍了如何利用SQL实时监控泛微E8系统中的审批流程状态,包括核心数据表结构解析、全链路监控SQL实战以及智能预警机制设计。通过数据库直接查询和状态关联分析,帮助企业快速定位卡顿节点,提升流程效率。适用于需要优化OA系统流程管理的企业IT人员和业务主管。

weixin_30687051的博客 439

AI+AB测试提升电商主图点击率实战指南

在电商运营中,主图点击率(CTR)是衡量商品吸引力的核心指标,直接影响转化率和订单增长。通过AI技术批量生成高质量主图素材,结合数据驱动的AB测试方法,可以显著提升点击率。AI工具如MidJourney和Stable Diffusion能够快速生成多样化视觉方案,而自动化处理流水线则确保素材规格统一。AB测试体系通过多维变量控制和流量分配策略,科学验证不同素材效果。这种方法特别适用于需要快速迭代的电商场景,某女装店铺案例显示CTR从1.2%提升至3.8%,验证了AI+数据协同优化的技术价值。

weixin_29058331的博客 298

utf-8和gbk之间相互转换

经过项目测试时正确的:#include //Added for convert between utf-8 to gbk 20110314 by XYang int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen) { iconv_t cd; int rc; char **pin = &inbuf; char **pou

大象大象啥模样。。。 1953

Ollama-OCR实战:5分钟搞定PDF文档转Markdown(附qwen2.5vl模型配置)

本文详细介绍了如何利用Ollama本地部署多模态大模型qwen2.5vl,结合OCR技术,实现PDF文档到Markdown的端到端智能转换。通过解析传统OCR的局限与AI方案的优势,并提供从环境搭建、提示词工程到处理复杂表格的完整实战指南,帮助用户高效构建自动化文档处理流水线,彻底重塑文档处理工作流。

yog99的博客 606

从 GB2312 到 Unicode 转换表制作程式(JAVA)

/** * GB2312Unicde.java * Copyright (c) 1997-2003 by Dr. Herong Yang */import java.io.*;import java.nio.*;import java.nio.charset.*;class GB2312Unicde {   static OutputStream out = null;   static char

yanwenyuan0102的专栏 1338

论文地图合规求生指南:5分钟搞定标准地图服务转ArcGIS可用矢量文件

本文提供了一份论文地图合规求生指南,帮助非GIS专业背景的科研人员在5分钟内将标准地图服务的EPS文件转换为ArcGIS兼容的矢量文件。通过详细的工作流程和关键参数设置,确保地图完全符合国家规范,同时节省时间成本。重点关注标准地图服务的合规性和Shapefile转换技巧,适用于紧急情况下的论文地图处理。

weixin_34233974的博客 402

实战指南:如何用Frida绕过某梆加固的Anti-Frida检测(附完整脚本)

本文深入剖析了企业级加固方案中的Anti-Frida检测机制,并提供了实战对抗策略。通过分析基于文件系统、内存特征、行为及环境的多层次检测原理,文章详细介绍了如何定位检测逻辑、绕过maps文件扫描、对抗内存与行为特征检测,并附上了针对某梆加固的完整绕过脚本与系统化工程方案。

weixin_42527589的博客 600

和荣笔记 -- 从 Unicode 到 GB2312 转换表制作程式

在我发表了 GB2312 到 Unicode 的转换表以后,收到了读者信件,寻求 Unicode 到 GB2312 的转换表。 下面的程式便可以用来制作这样的转换表。程式的输出结果收入下一章之中。 1/***//**2*UnicodeGB2312.java3*Copyright(c)1997-2003byDr.HerongYang4*/5impor...

weixin_33686714的博客 132

SAP SM30数据维护实战:条件筛选与动态校验的实现技巧

本文详细介绍了SAP SM30数据维护的实战技巧,重点讲解如何通过条件筛选实现精准数据查取,以及利用表维护生成器事件实现动态数据检查与校验。文章提供了从基础视图创建到高级事件编程的完整流程,包括调用函数VIEW_MAINTENANCE_CALL传递筛选条件,以及在NEW_DATA和CHANGE_SAVE事件中编写业务规则校验逻辑,帮助开发者提升SM30的管控能力与数据质量。

q9w8e7r6t5的博客 521

和荣笔记 -- 从 GB2312 到 Unicode 转换表制作程式

这本手册里的字符与汉字编码列表由下面的程式所生成。   1/** *//**  2* GB2312Unicde.java  3* Copyright (c) 1997-2003 by Dr. Herong Yang  4*/  5import java.io.*;  6import java.nio.*;  7import java.nio.charset.*;  8class GB2...

weixin_34151004的博客 98

程序化广告ADX系统架构设计与实现

摘要: 本文详细介绍了程序化广告交易平台(ADX)的系统架构设计与实现。ADX作为连接广告主与媒体的核心平台,采用基于腾讯云和阿里云的微服务架构,包含网络基础设施、负载均衡、消息处理、核心业务服务和多级数据存储等层次。重点解析了Kafka消息队列处理高并发广告请求、Redis实时统计关键指标等核心技术实现,并提供了Java代码示例展示广告请求处理、竞价流程等核心功能。该系统通过分层设计和分布式组件,实现了高性能、高可用的程序化广告交易能力。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 768

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

GB2312 和 UNICODE 映射表(1)

GB2312 和 UNICODE 映射表

bkspiderx的博客 1733

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Erlang 中文简体字 GB2312 转 unicode 的办法(2)

建立编码转换表,可用任何支持unicode的语言,我用的是Python。def to_unicode():    f = open(gb2u.erl,w)    for row in range(176,248):        for col in range(1,95):            ch1 = chr(row)            ch2 = ch

lawme的专栏 2645

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

GB2312 Unicode转换表实现跨平台utf8转码unicode

在GSM模块中,为发送中文短信,采用pdu发送,需要unicode编码。源程序编辑软件将中文转化为GB2312编码,再下列的GB2312 Unicode转换表转为unicode。 实现2维数值,GB2312编码为递增,适合用二分法查找由GB2312码找Unicode码。 只含基本的汉字,符号未包括。 说明unit16 为16位的无符号整数unsigend short int ht

ghevinn欢迎您光临 2126

GB2312转unicode

实现2维数值,GB2312编码为递增,适合用二分法查找由GB2312码找Unicode码。 只含基本的汉字,符号未包括。 说明unit16 为16位的无符号整数unsigend short int #typedef  unsigned short int   uint16;   #define MAX_UNI_INDEX  6768 const uint16 GB_

a369000753的博客 1万+

ASCII,UNICODE,UTF,GB2312,GBK详解

 一、概念                  1,ASCII         ASCII(American Standard Code for Information Interchange),中文名称为美国信息交换标准代码。是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。ASCII码又分为标准ASCII码和扩展ASC

passion_wu128的专栏 2252

Erlang 中文简体字 GB2312 转 unicode 的办法(1)

这些天,一直在琢磨Erlang中文简体字转unicode的办法。想到过,用 port,C或Python外部模块;用erts,dict,array,但不仅都太烦琐,甚至没怎么看懂。编程需要考虑的两大问题:功能与效率。效率,不仅是程序运行效率,还有编程工作效率。代码越简单效率越高。用简单的工具和办法,显不出学术理论水平,所以,常见玩高深的。中文简体字转unicode,不是高深的问题,涉

lawme的专栏 4638

.NET Compact Framework中解码GB2312

昨天在制作“掌上IP通”调用纯真IP数据库的时候,遇到了GB2312解码的问题。我想,在.NET平台上本来可以用System.Text.Encoding.GetEncoding("GB2312")得到GB2312的解码器的,在.NET Compact Framework中也可以使用这个方法。查阅MSDN,也确实能够支持。但十分遗憾的是,当在PDA上执行此条语句的时候,返回的却是null。如果直接使...

weixin_34419321的博客 201

UTF8 到GB2312 的 转换

这段代码不仅仅是含有UTF8到Unicode的转换,还包括Gb2312,Unicode 到Gb2312 如过不使用Windows API的话,那么自己因该建立一个转化表,这样效率才会好,因为我一时没有找到这种表。如果谁有请贴上来。谢谢。#include string.h>#include tchar.h>using namespace std;int GetNo(char ch)...{ 

zwh37333的专栏 1378
上一篇: gb2312和UTF-8的区别
下一篇: Unsupported major.minor version 49.0
2022_test_2022
博客等级 码龄22年 28粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值