文档章节

C#制作unicode到gb2312映射表

卜霞森
 卜霞森
发布于 2015/11/20 22:38
字数 437
阅读 135
收藏 3
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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        class unit_converter : IComparable<unit_converter>
        {
            public int gb2312 = 0;
            public int unicode = 0;

            public unit_converter()
            {

            }

            public unit_converter(int gb2312_0, int gb2312_1)
            {
                init_with_gb2312(gb2312_0, gb2312_1);
            }

            private int CompareWithUnicode(unit_converter other)
            {
                return unicode.CompareTo(other.unicode);
            }

            private int CompareWithGB2312(unit_converter other)
            {
                return gb2312.CompareTo(other.gb2312);
            }

            public int CompareTo(unit_converter other)
            {
                if(unicode == other.unicode)
                {
                    Console.WriteLine("something wrong with gb2312: "+ gb2312.ToString("X4") + "unicode: "+unicode.ToString("X4"));
                }
                return CompareWithUnicode(other);
                //return CompareWithGB2312(other);
            }

            private byte[] _gb2312 = new byte[2];
            private byte[] _unicode = new byte[2];

            public void init_with_gb2312(int gb2312_0, int gb2312_1)
            {
                _gb2312[0] = (byte)gb2312_0;
                _gb2312[1] = (byte)gb2312_1;
                gb2312 = _gb2312[0] * 256 + _gb2312[1];

                String s_target_gb2312 = System.Text.Encoding.GetEncoding("GB2312").GetString(_gb2312);
                byte[] b_target_unicode = System.Text.Encoding.GetEncoding("unicode").GetBytes(s_target_gb2312);
                _unicode[0] = b_target_unicode[1];
                _unicode[1] = b_target_unicode[0];

                unicode = _unicode[0] * 256 + _unicode[1];
            }

            private void init_with_unicode(int unicode_0, int unicode_1)
            {
                _unicode[0] = (byte)unicode_1;
                _unicode[1] = (byte)unicode_0;
                unicode = _unicode[0] * 256 + _unicode[1];

                String s_target_unicode = System.Text.Encoding.GetEncoding("unicode").GetString(_unicode);
                byte[] b_target_gb2312 = System.Text.Encoding.GetEncoding("GB2312").GetBytes(s_target_unicode);
                _gb2312[0] = b_target_gb2312[0];
                _gb2312[1] = b_target_gb2312[1];
                gb2312 = _gb2312[0] * 256 + _gb2312[1];
            }
        }

        List<unit_converter> elements = new List<unit_converter>();


        private void make_src_gb2312()
        {
            for (int index_level_1 = 0xA1; index_level_1 < 0xAA; index_level_1++)
            {
                for (int index_level_2 = 0xA1; index_level_2 < 0xFF; index_level_2++)
                {
                    elements.Add(new unit_converter(index_level_1, index_level_2));
                }
            }
            for (int index_level_1 = 0xB0; index_level_1 < 0xF7; index_level_1++)
            {
                for (int index_level_2 = 0xA1; index_level_2 <= 0xFF; index_level_2++)
                {
                    elements.Add(new unit_converter(index_level_1, index_level_2));
                }
            }

            Console.WriteLine("CNT " + elements.Count.ToString());

            elements.Sort();

        }


        private String save_to_string()
        {
            String target_string = "";
            target_string += "uint16_t const sorted_unicode[MAX_UNI_INDEX] = {";
            int length = elements.Count();
            for(int i =0; i < length; i++)
            {
                if(i%8 == 0)
                {
                    target_string += "\r\n   ";
                }
                target_string += " 0x" + elements[i].unicode.ToString("X4") + ",";
            }
            target_string += "\r\n};";

            target_string += "\r\nuint16_t const sorted_gb2312[MAX_UNI_INDEX] = {";
            for (int i = 0; i < length; i++)
            {
                if (i % 8 == 0)
                {
                    target_string += "\r\n   ";
                }
                target_string += " 0x" + elements[i].gb2312.ToString("X4") + ",";
            }
            target_string += "\r\n};";
            return target_string;
        }

        private void save_to_file()
        {
            String t = save_to_string();
        }

        private void font_test()
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //C9AD  森
            byte[] b_src_gb2312 = new byte[2] { 0xC9, 0xAD };


            byte[] b_src_unicode = new byte[2] { 0x02, 0x30 };
            unit_converter converter = new unit_converter(b_src_gb2312[0], b_src_gb2312[1]);

            //String s_target_gb2312 = System.Text.Encoding.GetEncoding("GB2312").GetString(b_src_gb2312);
            //byte[] b_target_unicode = System.Text.Encoding.GetEncoding("unicode").GetBytes(s_target_gb2312);
            //String s_target_unicode = System.Text.Encoding.GetEncoding("unicode").GetString(b_target_unicode);
            String s_target_unicode = System.Text.Encoding.GetEncoding("unicode").GetString(b_src_unicode);

            byte[] b_target_gb2312 = System.Text.Encoding.GetEncoding("GB2312").GetBytes(s_target_unicode);
            make_src_gb2312();
            save_to_file();
            font_test();

            Console.WriteLine("start");
        }
    }
}


© 著作权归作者所有

卜霞森
粉丝 2
博文 50
码字总数 32877
作品 0
深圳
程序员
私信 提问
加载中

评论(2)

卜霞森
卜霞森 博主

引用来自“zonghua”的评论

iconv_lite
我是本地C用的。。 所以需要做成映射表查表用
啦啦啦拉拉
啦啦啦拉拉
iconv_lite
关于字符集和字符编码的问题

在系统管理或一些软件管理中,总是碰到需要设置字符集或字符编码的地方,如果设置不正确,可能产生许多意想不到的问题。 但是在具体概念上,不仅自己,网络上也有很多人不太理解“字符集”和...

wuwei5460
2014/02/24
0
0
python的encode和decode误读总结

python的encode和decode误读总结 最近在学Python,对编码有个误解的地方 下面是错误的理解: encode():编码,将对象的编码转换为指定编码格式,按照字面理解,一直以为是其他编码格式转换...

四京
2018/01/04
0
0
几个基本字符集整理介绍

ASCII 参考:http://zh.wikipedia.org/wiki/ASCII American Standard Code for Information Interchange,美国信息交换标准代码 用一个字节表示128个字符,其中不可显示字符33个.33个字符中有...

长平狐
2012/08/28
84
0
再谈谈对Java C#中Unicode、编码和编码转换的理解

写这短文之前想问大家一个问题,String 类型是什么编码?那char呢? 其实,记住一句话就行了,String 和char 都是unicode编码!!!底层的虚拟机和框架只能直接操作unicode编码。String= cha...

梁金堂
2016/10/17
84
0
Java 应用中,各种编码问题知识点梳理

参考资料: java 类里判断字符串是iso-8859-1还是gb2312,utf-8,gbk等,判断编码类型 1、判断字符串编码类型 System.out.println(java.nio.charset.Charset.forName("GB2312").newEncoder().c......

hiqj
2014/10/17
45
0

没有更多内容

加载失败,请刷新页面

加载更多

HashMap源码分析

read

V丶zxw
43分钟前
5
0
Python字符串或JSON字符串转字典dict、列表list

有3种方法 1、使用ast模块 >>> import ast>>> s = '["test",1]'>>> ast.literal_eval(s)['test',1]>>> s = '{"test":1}'>>> ast.literal_eval(s){'test': 1} 2、eval函数,这个......

编程老陆
今天
5
0
【JS复习笔记】03 继承(从ES5到ES6)

本文转载于:专业的前端网站➫【JS复习笔记】03 继承(从ES5到ES6) 前言 很久以前学习《Javascript语言精粹》时,写过一个关于js的系列学习笔记。 最近又跟别人讲什么原型和继承什么的,发现...

前端老手
今天
8
0
简单动态网站搭建

如何在windows服务器上配置wordPress和discuz 网站建设中的概念讲解 网站建设的基础操作 网站程序的基础使用 网站程序的优化 简单动态网站搭建 软件部署 域名和主机的购买 域名解析 环境部署...

达达前端小酒馆
今天
6
0
Java每日面试题_03

15、构造器是否可被override constructor(构造器)不能被继承,所以不能被override(重写),但是可以被overloading(重载)。 16、抽象类和接口的区别 抽象类是什么 含有abstract修饰符的class即...

庭前云落
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部