精华内容
下载资源
问答
  • 2021-02-25 18:58:09

    本文实现将GB2312编码转换成汉字,并简单了解一下GB2312。

    GB2312是信息交换汉字编码字符集,适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆。使用区位码表示方式,对所收汉字进行了“分区”处理,每区含有94个汉字/符号。

    01-09区为特殊符号。

    16-55区为一级汉字,按拼音排序。

    56-87区为二级汉字,按部首/笔画排序。

    10-15区及88-94区则未有编码。

    EG:“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。

    注:每个汉字及符号以两个字节来表示。

    将GB2312编码转化为汉字:

    public void App() throws Exception{

    String string = "CCB8B9FAC6BD";

    String result = stringToGbk(string);

    System.out.println(result);

    }

    //将gbk编码转换成汉字

    public String stringToGbk(String string) throws Exception{

    byte[] bytes = new byte[string.length() / 2];

    for(int i = 0; i < bytes.length; i ++){

    byte high = Byte.parseByte(string.substring(i * 2, i * 2 + 1), 16);

    byte low = Byte.parseByte(string.substring(i * 2 + 1, i * 2 + 2), 16);

    bytes[i] = (byte) (high << 4 | low);

    }

    String result = new String(bytes, "gbk");

    return result;

    }

    第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。

    “高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了 0xA1-0xFE(把01-94加上 0xA0)。

    由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是 72*94=6768。其中有5个空位是D7FA-D7FE。

    EG:“啊”字以两个字节,0xB0(第一个字节) 0xA1(第二个字节)储存。

    区位码=区字节+位字节(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)

    更多相关内容
  • 简单的汉字GB2312编码查询工具,暂时只支持查询汉字,能查一些中文字符,英文字符会被识别错误!!!ASCII表中包含的那些字符不可以用,适用于单片机开发者做字符取模时查询编码
  • unicode编码与gb2312编码对应表,其中unicode部分是propertises文件的key,gb2312编码是propertises文件的value部分。利用程序读取键值对,就可以找到unicode对应的gb2312编码
  • GB2312编码对照表

    2018-07-04 18:12:08
    GB2312简体中文编码GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。整个字符集...
  • 纯js对字符串进行gb2312编码解码,如“中国”编码后成为:“%D6%D0%B9%FA”,很好用的
  • php实现utf-8和GB2312编码相互转换的一个函数,有需要的朋友可以参考下
  • 通过二分法查表的方法,把unicode编码转化为gbk编码。调用函数即可实现 UCToGB2312(入参unicode字符串),返回值为gbk字符串
  • 使用方法见本人博客《IE中js往后台传输中文乱码》
  • js 原生只支持utf-8,扩展 js转换成GB2312,js 原生只支持utf-8,扩展 js转换成GB2312,js 原生只支持utf-8,扩展 js转换成GB2312
  • unicode编码与gb2312编码对应表,其中gb2312部分是按从小到大排列的,方便查找。主要用于C语言程序中。可以使用二分法查找,提高效率。
  • gb2312编码

    2016-11-11 21:33:29
    gb2312编码
  • GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)...
  • unicode编码转GB2312编码

    2020-06-16 22:43:47
    C++实现 unicode编码转GB2312编码 C++实现 unicode编码转GB2312编码 使用简单,可二次开发
  • ASP程序在同一个站点中,如果有UTF-8编码的程序,又有GB2312编码的程序时,在浏览UTF-8编码的页面后,再浏览当前网站GB2312的页面,GB2312编码的页面就会出现乱码
  • 主要介绍了idea中引入了gb2312编码的文件的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • java 字符串转换成gb2312编码格式

    千次阅读 2021-10-12 17:20:44
    public static String convertStr(String... //先把字符串按gb2312转成byte数组 byte[] bytes = msg.getBytes("gb2312"); StringBuilder gbString = new StringBuilder(); for (byte b : bytes) { // 再用Integ.
    public static String convertStr(String msg) throws UnsupportedEncodingException {
        //先把字符串按gb2312转成byte数组
         byte[] bytes = msg.getBytes("gb2312");
        StringBuilder gbString = new StringBuilder();
      
        for (byte b : bytes)
        {
            // 再用Integer中的方法,把每个byte转换成16进制输出
            String temp = Integer.toHexString(b);
            //判断进行截取
            if(temp.length()>=8){
                temp = temp.substring(6, 8);
            }
            gbString.append("%" + temp);
        }
       return gbString.toString();
    }

    再main中运行。打印如下

     

    展开全文
  • GB2312编码和UTF-8互转(c语言实现)

    热门讨论 2013-01-01 14:55:23
    GB2312编码与utf-8编码的字符串的转换,主要使用windows api函数MultiByteToWideChar和WideCharToMultiByte,代码简洁,经测试可用
  • C# 实现汉字与GB2312编码的转换

    千次阅读 2022-02-21 10:29:30
    } //将汉字转换成GB2312编码 private byte[] StringToBytes(string TheString) { Encoding fromEcoding = Encoding.GetEncoding("UTF-8");//返回utf-8的编码 Encoding toEcoding = Encoding.GetEncoding("gb2312");...

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace HanZiEncoding
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            //将汉字转换成GB2312编码
            private byte[] StringToBytes(string TheString)
            {
                Encoding fromEcoding = Encoding.GetEncoding("UTF-8");//返回utf-8的编码
                Encoding toEcoding = Encoding.GetEncoding("gb2312");
                byte[] fromBytes = fromEcoding.GetBytes(TheString);
                byte[] tobytes = Encoding.Convert(fromEcoding, toEcoding, fromBytes);//将字节数组从一种编码转换为另一种编码
                return tobytes;

            }
            //将GB2312编码转换成汉字
            private string BytesToString(byte[] bytes)
            {
                string myString;
                Encoding fromEcoding = Encoding.GetEncoding("gb2312");
                Encoding toEcoding = Encoding.GetEncoding("UTF-8");
                byte[] toBytes = Encoding.Convert(fromEcoding, toEcoding, bytes);
                myString = toEcoding.GetString(toBytes);//将字节数组解码成字符串
                return myString;
            }
            private void button1_Click(object sender, EventArgs e)
            {
                byte[] stringToByte = StringToBytes(textBox1.Text);
                textBox2.Text = "";
                foreach(byte myByte in stringToByte)
                {
                    string Str = myByte.ToString("x").ToUpper();
                    textBox2.Text += "0x" + (Str.Length == 1 ? "0" + Str : Str) + " ";
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                byte[] data = new byte[textBox3.Text.Length / 2];
                int i;
                try
                {
                    string buffer = textBox3.Text;
                    buffer = buffer.Replace("0x", string.Empty);
                    buffer = buffer.Replace(" ", string.Empty);
                    for (i = 0; i < buffer.Length / 2; i++)
                    {
                        data[i] = Convert.ToByte(buffer.Substring(i * 2, 2), 16);
                    }
                    textBox4.Text = BytesToString(data);
                }
                catch (Exception)
                {
                    MessageBox.Show("数据转换错误,请输入数字");
                }
            }
        }
    }
     

     

    展开全文
  • 汉字编码转换工具,实现了汉字与 utf-8 gb2312 unicode 互转,开发者多百多度 qq:547170882
  • unicode编码转gb2312编码并显示中文(c&java) unicode编码与gb2312编码没有线性关系,只能通过使用编码表的方式查找。 C语言 编码表中,前半部分是gb2312编码,后部才是unicode编码。在程序中我们要用值来...

    unicode编码转gb2312编码并显示中文(c&java)

    • unicode编码与gb2312编码没有线性关系,只能通过使用编码表的方式查找。

    C语言

    • 编码表中,前半部分是gb2312编码,后部才是unicode编码。在程序中我们要用值来寻找键。

    • C语言的思路是,把两个对应的编码表作为头文件引入到程序中。可以让我们能够,很好的使用它。在使用之前,我们需要把编码表进行处理。让unicode编码按顺序排列。

    • 文字部分,我们不需要存储,当我们找出gb2312编码之后。只用把高低两个字节的16进制数,存储到两个char类型的变量中,使用%c%c进行输出。电脑会判断出是中文,会把中文显示出来。

    原始设计

    • 开始我的设计是unicode与gb2312都可以互相转换,但是由于时间问题。gb2312只完成了一部分,这部分代码,我注释掉了。如果想要使用,可以自行修改。
    • gb2312转unicode,需要把取6位变取4位。这步完成之后,应该就可以使用了。
    • 选择一次处理一位,而不是全部读取出来,是因为避免文件太大。节省空间。

    吐槽

    • 代码,开始只想在main中调用函数。可是由于字符串传递,不熟悉。被放弃了。导致main函数中一堆垃圾,还分出一堆子函数。传参只能传递,int类型。垃圾!!!
    • 由于头文件过大,在编译时可能出现卡顿现象。别急,等等就好了。
    • 建议使用我排好序的头文件,自己编写。因为代码太乱。我自己都不想看,艹。
    • 程序没有鲁棒性,没有输入码的判断,最大的问题。

    流程图

    在这里插入图片描述

    • 判断字符数量,主要作用为下一次的分割计算需要分割的次数。
    • 每次取六位,前两位是\u,后四位是其对应的16进制编码。
    • 因为unicode编码有大致的范围,所以先判断是否在gb2312与之对应的范围。如果不在,就不用查找了。减少查找的次数。
    • 如果在大概范围之类,就可以进行查找。因为unicode编码是按顺序的。所以使用二分法进行查找。

    源.c

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include"g.h"
    #include"u.h"
    //#define u_code 1
    //#define g_code 2
    
    int readfile();//读取文件,处理文件,判断大小
    int isright(unsigned short origin_code,int method);//判断编码正确与否
    int search_gb2132(unsigned short origin_code, int method);//搜索
    
    
    void main()
    {
        int u_code=1;
        int some;
        int int_code;
        char str_begin[3] = { 0 };
        int flag;
        int str_begin_num;
        long long_code;
        char str[4] = {0};
        char* end;
        int code_right;
        int str_num;
       /* printf("1.unicode转gb2132\n2.gb2132转unicode\n输入你的选择:");
        scanf("%d",&some);
        if (some==1)
        {
            u_code = 1;
        }*/
        FILE* fp;
        fp = fopen("D:\\vs\\target.txt", "rb");
        //printf("%d", flag);
        flag = readfile();
        while (flag > 0)
        {
            flag--;
            //printf("%d", flag);
           
            str_begin_num = fread(str_begin, sizeof(char), 2, fp);
            str_num = fread(str, sizeof(char), 4, fp);
            long_code = strtol(str, &end, 16);
            int_code = (int*)long_code;
            code_right = isright(int_code, u_code);
            if (code_right == 1)
            {
                search_gb2132(int_code, u_code);
            }
        }
        fclose(fp);//关闭文件并保存
        FILE* fpp;
        fpp = fopen("c:\\123.txt", "a+");
        fprintf(fpp, "\n\n\n");
        fclose(fpp);
        fclose(fp);
    	return 0;
    }
    
    //搜索,处理
    //method,1  u-->gb
    int search_gb2132(unsigned short origin_code, int method)
    {
        char code_c[2];
        unsigned short end_code;
        int code = -1;
        int left = 0;
        int right = 7444;
        int num;
        int num2=0;
        FILE* fp;
        if (method == 1)//通过unicode,查gb2132
        {
            while (left <= right)
            {//在while循环中直到有一个条件结束搜索 
                num = (left + right) / 2;
                if (uni_map[num].value > origin_code)
                {
                    left = num + 1;
    
                    //printf("%d\n",left);
                }
                else if (uni_map[num].value < origin_code)
                {
                    right = num - 1;
                    //printf("%d\n", right);
                }
                else
                {
                    code = uni_map[num].key;
                    break;//一定要break跳出循环 
                }
            }
        }
        //else
        //{
        //    while (left <= right)
        //    {//在while循环中直到有一个条件结束搜索 
        //        num = (left + right) / 2;
        //        if (gb2312_map[num].key < origin_code)
        //        {
        //            left = num + 1;
    
        //            //printf("%d\n",left);
        //        }
        //        else if (gb2312_map[num].key > origin_code)
        //        {
        //            right = num - 1;
        //            //printf("%d\n", right);
        //        }
        //        else
        //        {
        //            code = gb2312_map[num].value;
        //            break;//一定要break跳出循环 
        //        }
        //    }
        //}
        if (code == -1)
        {
            printf("[\\u%X编码有误]", origin_code);
            fp = fopen("c:\\123.txt", "a+");
            fprintf(fp, "[\\u%X编码有误]", origin_code);
        }
        else 
        {
            end_code = code;
            //printf("%x\n", a);
            code_c[0] = end_code & 0x0ff;
            //printf("%x\n",c[0]);
            code_c[1] = end_code >> 8 & 0x0ff;
            //printf("%x\n", c[1]);
            printf("%c%c", code_c[1], code_c[0]);
            
            fp = fopen("c:\\123.txt", "a+");
            fprintf(fp, "%c%c", code_c[1], code_c[0]);
            
        }
        fclose(fp);
        return code;
    }
    
    //判断编码正确与否
    int isright(unsigned short origin_code,int method)
    {
        FILE* fp;
        if (method==1)
        {
            if (origin_code < 0x00a4 || origin_code>0xffe5)
            {
                printf("[\\u%X编码有误]", origin_code);
                FILE* fp;
                fp = fopen("c:\\123.txt", "a+");
                fprintf(fp, "[\\u%X编码有误]", origin_code);
                fclose(fp);
                return 0;
            }
        }
        /*else
        {
            if (origin_code < 0xa1a1 || origin_code > 0xf7fe)
            {
                printf("[%X编码有误]", origin_code);
                FILE* fp;
                fp = fopen("c:\\123.txt", "a+");
                fprintf(fp, "[\\u%X编码有误]", origin_code);
                fclose(fp);
                return 0;
            }
        }*/
        
        return 1;
    }
    
    //读取文件,处理文件,判断大小
    int readfile()
    {
        int address[50];
        int len=0;
        int flag;
        //printf("输入编码文件地址,注意地址最长50字节且\\需输入两次");
        //gets(address);
        FILE* fp;
        fp=fopen("D:\\vs\\target.txt", "rb");
        if (fp == NULL) //当文件不存在,或者无法创建时会报错;
        {
            printf("读取文件失败!!!\n");
        }
        while (!feof(fp))
        {
            fgetc(fp);
            len++;
        }
        rewind(fp);//文件指针回到开头
        flag = (len - 1) / 6;
        fclose(fp);//关闭文件并保存
        return flag;
    }
    
    

    g.h

    • gb2312按顺序排列的头文件

    gb2312顺序排列头文件下载

    u.h

    结果展示

    在这里插入图片描述

    java

    流程图

    在这里插入图片描述

    • java可以直接对gbk编码进行显示中文。但是gb2312是gbk的子集,为了避免显示出某些gb2312中没有的字符,所以还要查表。
    • 把unicode作为key,把gb2312编码作为value。存储到propertises文件中,进行查找。为什么这样,因为在我脑海中这样查的快。(不知道对不对)
    • 在查询到之后,在显示就好了。

    吐槽

    • 看起来不错,就是没有鲁棒性。一堆垃圾。
    • 如果要做,建议添加一个检查模块,就可以使程序更好。本来是要做的,但是时间不够,就放弃了。

    java文件

    package demo;
    import java.io.*;
    import java.util.Properties;
    
    public class Demo03 {
        public static String stringToGbk(String string) throws Exception{
            System.out.println(string);
            byte[] bytes = new byte[string.length() / 2];
            for(int i = 0; i < bytes.length; i ++){
                byte high = Byte.parseByte(string.substring(i * 2, i * 2 + 1), 16);   //0 1   2 3
                byte low = Byte.parseByte(string.substring(i * 2 + 1, i * 2 + 2), 16);//1 2   3 4
                bytes[i] = (byte) (high << 4 | low);
            }
            String result = new String(bytes, "gbk");
            return result;
        }
        public static void main(String[] args) throws Exception {
            Properties prop = new Properties();
            //1.创建一个FileInputStream对象,构造方法中需要绑定数据源
            FileInputStream fis = new FileInputStream("D:\\ja\\target.txt");
            //1.创建FileOutputStream对象,构造方法中传入写入的目的地
            FileOutputStream fos = new FileOutputStream("D:\\ja\\1.txt");
            //2.使用FileInputStream对象中的方法,read,读取文件
            int l=0;
            byte[] bytes = new byte[6];
            while((l=fis.read(bytes,0,6))!=-1){//结束标记-1
                String key = new String(bytes);
                //2.使用Properties集合中的load,把硬盘中的数据(键值对),读取到集合中使用
                prop.load(new FileReader("D:\\idea\\ma\\untitled\\src\\demo\\utogb.properties"));
                //3.取出16进制数
                String[] key1=key.split("u",2);
                //System.out.println(key1[1]);
                //通过键找值
                String value = prop.getProperty(key1[1]);
                //System.out.println(key+"="+value);
                //判断表中是否包含此码
                if(value==null){
                    System.out.println(key1[1]+"未找到此码");
                    fos.write(("["+key1[1]+"未找到此码]").getBytes());
                    continue;
                }
                String result = stringToGbk(value);
                //2.调用FileOutputStream对象中的方法write,把数据写入文件中
                fos.write(result.getBytes());
                System.out.println(result);
            }
            //3.释放资源
            fis.close();
            fos.close();
        }
    }
    
    

    propertises键值对

    unicode与gb2312键值对propertises文件

    结果展示

    在这里插入图片描述

    展开全文
  • GB2312,UTF8,UCS2汉字编码生成与转换
  • ASP源码,压缩包解压密码:www.cqlsoft.com
  • 本资源主要为GB2312编码表、字库下载以及移植教程,非常详细,分享给各位小伙伴
  • 可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
  • GB2312编码下的16*16点阵汉字库(先左后右先上后下),宋体12号或小4字体大小(简体)
  • 汉字GB2312编码字符集

    万次阅读 2019-04-22 18:19:52
    GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。整个字符集分成94个区,每区有94个位...
  • GB2312简体中文编码表(完整版) 所有简体汉字和英文字符的编码都有

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,086
精华内容 64,034
关键字:

gb2312编码

友情链接: vue.zip