GBK/GB2312编码问题分析以及java获取汉字国标码

全国各地城市区号对照表以及自动创建城市java代码 全国各地城市区号对照表以及自动创建城市java代码,需要excel整理出来的请移步这里https://download.youkuaiyun.com/download/frank7023/86263368 立即下载

编码问题分析

个人经验:

  这几天在公司,发报文调试接口的时候由于使用UTF8跟GBK两种编码很头疼。页面显示为utf8码,但是解析报文使用的却是GBK,这样就会出现两种情况,要么你调试页面是正常的,报文是乱的,要么调试页面使用乱码格式,报文显示正常!。。。。总结后:发现一个项目中必须要统一使用一种编码格式!然后就是不同编码必定会有差异,GBK编码跟utf8编码是不可能存在转换关系的,用什么样的编码格式发送的就需要使用该格式去解析!

GBK/GB2312透析:

  

import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class GBKEncodeUtil {
	/**
	 * GB2312/GBK编码类
	 * 
	 * 机内码,区位码,国标码  三者间存在联系,由于机内码,国标码一般以四位十六进制的形式存在,区位码以四位十进制表示。
	 * 
	 * 举例子: 
	 *   德  ---区位码:2134
	 *  机内码:  高位字节 = 21(十进制) + A0H(十六进制) = 15H + A0H = B5H
	 *          低位字节 = 34(十进制) + A0H(十六进制) = 22H + A0H = C2H    
	 *           机内码: B5C2H
	 *  国标码:  高位字节 = 21(十进制) + 20H(十六进制) = 15H + 20H = 35H
	 *          低位字节 = 34(十进制) + 20H(十六进制) = 22H + 20H = 42H
	 *           国标码: 3542H  
	 *           
	 *           同理: 国标码 = 机内码 - 8080H
	 */
    public static void main(String[] args) {
    	String str = "德".trim();
    	System.out.println(str);
    	System.out.println("机内码:0x" + getJineiMa(str));
    	System.out.println("区位码:" + getLocationCode(str));
    	System.out.println("国标码:0x" + getGBCode(str));
    	System.out.println(getCharacter("B0A1"));
    	
	}
    
    /**
	 * 判断str是否为汉字
	 * @param str 待检测值
	 * @return true 是 false 不是
	 */
	public static boolean isCharacter(String str){
		  Pattern p_str = Pattern.compile("[\\u4e00-\\u9fa5]+");
		  Matcher m = p_str.matcher(str);
		  if(m.find()&&m.group(0).equals(str)){
			  return true;
		  }
		  return false;
	}
	/**
	 * 获取机内码
	 * @param chineseName
	 * @return 汉字的机内码  String类型
 	 */
	public static String getJineiMa(String chineseName){
		StringBuffer sb = new StringBuffer();
		try {
			char[]ch = chineseName.toCharArray();
			for (char c : ch){
				if (isCharacter(String.valueOf(c))){
					byte[]by = String.valueOf(c).getBytes("GBK");
					for (byte b : by){
						sb.append(Integer.toHexString(b & 0xff));
					}
				}else{
					byte b = (byte) c;
					sb.append(Integer.toHexString(b & 0xff));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return sb.toString().toUpperCase().trim();
	}

	/**
	 * 获得汉字区位码
	 * 
	 * @param chineseName 汉字
	 *            
	 * @return 单个汉字区位码
	 */
	public static String getLocationCode(String chineseName){
		// 先判断chinese是否为汉字
		if (!isCharacter(chineseName)) return "输入的不是汉字!";
		String jiNeiMa = getJineiMa(chineseName);
		String highOrder = jiNeiMa.substring(0, 2);  // 高位
		String lowOrder = jiNeiMa.substring(2, 4);   // 低位
		String quWeiMa = String.valueOf((Integer.parseInt(highOrder, 16) - 0xA0)) + String.valueOf(Integer.parseInt(lowOrder, 16) - 0xA0);
		return quWeiMa;
	}
	/**
	 * 获取  国标码
	 * @param chineseName
	 * @return
	 */
    public static String getGBCode(String chineseName){
    	// 先判断chinese是否为汉字
    	if (!isCharacter(chineseName)) return "输入的不是汉字!";
    	int jiNeiMa = Integer.parseInt(getJineiMa(chineseName), 16);
    	String gbMa = Integer.toHexString(jiNeiMa - 0x8080);
    	return gbMa;
    }
    
    /**
          根据机内码获取汉字
	 * @param quWeiMa
	 * @return 汉字
     */
    public static String getCharacter(String jiNeiMa){
    	byte b1 = (byte) Integer.parseInt(jiNeiMa.substring(0, 2), 16);
    	byte b2 = (byte) Integer.parseInt(jiNeiMa.substring(2, 4), 16);
    	
    	String str = null;
		try {
			str = new String(new byte[]{b1,b2}, "GBK");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
    	return str;
    }
    
}

运行结果:

德
机内码:0xB5C2
区位码:2134
国标码:0x3542
啊



深入解析CAN总线BusOff故障的检测与恢复机制 本文深入解析了CAN总线BusOff故障的检测与恢复机制。BusOff是CAN节点因发送错误过多而被强制离线的一种严重状态。文章详细阐述了其触发原理,即发送错误计数器(TEC)超过255,并重点介绍了通过软件实现的快慢恢复机制,以增强网络在异常情况下的稳定性和韧性。 阅读详情

相关推荐

量子密钥分发(QKD)原理、工程实现与实战部署全解析

密钥分发是信息安全的核心基础,它解决了通信双方如何安全共享秘密密钥的难题。传统方法依赖于数学问题的计算复杂性,而量子密钥分发(QKD)则基于量子力学原理,为密钥分发提供了信息论安全的物理保障。其核心价值在于,利用量子不可克隆定理和测量坍缩原理,使得任何窃听行为都会被合法通信方检测到,从而在理论上实现无条件安全的密钥协商。这项技术特别适用于对安全性要求极高的场景,如金融数据同步、政务专网和电力系统保护。本文聚焦于量子保密通信,深入剖析了以BB84协议为代表的QKD工作原理,并详细拆解了包含单光子探测、偏振编码

weixin_29324401的博客 344

华中科技大学计算机组成原理实验——数据表达实验

一、实验目的 1.理解汉字机内码、区位码的概念,并且能够利用相关的工具批量获取一段汉字文字的GB2312机内码,利用简单的电路实现汉字GB2312机内码与区位码的转换; 2.了解字形码显示的基本原理,能够在实验环境中实现汉字GB2312编码的字形码点阵显示; 3.掌握CRC校验码设计原理与纠错性能,能单独设计实现16位汉字GB2312机内码的CRC编码体系,并最终在实验环境中利用硬件电路实现对应的CRC编码和解码电路; 4.熟悉流水传输机制、流水暂停原理,能够对实验环境提供的五段流水编码传输电

weixin_63870922的博客 7965

3D Slicer中文教程(三)—数据加载及保存方式

1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开。 ——多种方式加载大量数据。 有关DICOM数据,请参阅DICOM模块文档。 对于几乎所有其他(包括场景),您可以使用添加数据对话框。 有关支持的数据格式的列表,请参阅此列表。 请注意,仅部分支持列出的某些格式。 ——对于一些更复杂的格式(特别是DWI),建议首先使用DICOM到n...

weixin_33676492的博客 5533

gbk 编码表

GBK编码范围:8140-FEFE,汉字编码范围见第二节:码位分配及顺序。 GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646

AI 前沿技术实战博客:LLM / Agent / AI 制药 / 生信四大栏目日更,硬核干货 + 可复现代码,看完就能上手 28万+

思科路由器、交换机组网实验报告

通过思科模拟器搭建路由交换网络

ghj528的博客 1334

ISO 26262中的失效率计算:Mission profile的使用

Mission profile:任务剖面,即产品在完成规定任务这段时间内所经历的时间和环境的时序描述;集成电路在工作时环境温度是在不停变化的,同时也存在运行状态和非运行状态;为此标准提出了根据任务剖面(Mission profile)以及集成电路的实际结温来评估热幅度变化、循环温度幅值等因素的影响;汽车电子元器件相关的Mission profile参考IEC TR 62380:Table 11。

weixin_47071127的博客 4807

区位码、国标码、机内码、GBK

1980年,为了使每个汉字有一个全国统一的代码,我国颁布了汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集——基本集》,这个字符集是目前国内所有汉字系统的统一标准。它规定了用两个字节来表示一个汉字,每个字节都只能使用低7位,共有128*128种状态,又由于ASCII中的控制代码在汉字系统中也要使用,所以只剩下94*94=8836种状态用来表示国标码规定的6763个汉字和682个全角

coding tree 7374

FPGA DDR3实战(四):DDR地址映射自动化测试(1)—— 测试程序设计与代码逻辑

本文介绍了一种DDR地址映射自动化测试方案,旨在提高板卡调试效率。方案通过AXI4协议实现主从端通信,构建了包含地址控制器和测试数据生成器的模块化架构。测试程序支持突发传输、状态监控和错误检测,可灵活配置测试参数。采用状态机控制流程,先写入递增数据再读取比对,完成功能验证和性能评估。该方案可系统化验证DDR的正确性、稳定性和可靠性,相比传统手动测试显著提升效率。

FPGA_小田老师的博客 1976

java爬虫爬取gb2312编码的中文网页时出现个别中文字符乱码问题及解决方案

使用Java爬虫爬取中国青年网:http://news.youth.cn/sh的社会新闻模块时,出现部分乱码问题,如下图所示: 我的爬虫使用的是自己编写的一个简单的网页编码探测器来获取网页编码的,按理说不应该出现乱码问题,下载网页的工具类代码如下:(下载工具类和字符探测工具类的两段代码不重要,不想看代码可以跳到第二部分) 一、测试工具类是否出错 /** *Httpclient下载工...

DriftJiangyun的博客 1815

交换机初始化配置详解

MGMT或称MGT(Management Port,管理端口)是一个可以连接计算机的三层主机端口,如下图所示。只需使用一条双绞线跳线,就可以将计算机的以太网端口与交换机的MGMT端口连接在一起,实现对交换机的配置与管理。也就是说,可以使用MGMT端口代替Console端口实现对交换机或交换机堆叠的网络管理。MGMT端口既可用于交换机的初始化,也可以在交换机初始化完成后,以Telnet、Web浏览器或Cisco CNA方式进行管理。当将计算机连接到独立的交换机时,连接方式如下图所示。

悦分享 1992

AD(十四)调用已有的PCB元件封装库

软件:Altium Designer 16 需要资料:已有的PCB原理图文件(.PCBDOC)或者PCB库文件(.PCBLIB)(来源文中细说) 调用已有的PCB元件封装库(一)从已有的PCB原理图文件(*.PCBDOC)中调用1、PCB原理图文件来源2、打开已有的PCB原理图文件(*.PCBDOC)3、生成PCB封装库4、复制封装到工程文件下的PCB库文件(*.PCBLIB)5、重名问题(二)从已有的PCB库文件(*.PCBLIB)中调用1、PCB库文件(*.PCBLIB)的来源2、打开已有的PCB库 (

Curnane0_0的博客 5082

头歌计算计组成原理实验之汉字机内码获取实验(详细步骤版)

第十步,实验完成,将文件另存为,再用记事本打开就可以去完成头歌平台上的任务啦。第四步 连线,并添加常量,设位宽为16,值为0xdfe0,并与加法器相连。第六步 将要求文字转为机内码,输进记事本,然后复制。第八步 点击GB2312处,再点击光标处,编辑内容。第二步 双击光标所在处,并点白色指针处。第七步 双击汉字显示,并点击另一处光标。第一步,打开data.circ文件。可以通过一下网站来获取文字的机内码。第九步 将得到的机内码复制到区域中。第三步 设置加法器,位宽为16。

m0_74848642的博客 4105

Qt/C++编写自定义控件49-飞机仪表盘

一、前言 飞行仪表是测定和表示飞机数据的工具,飞机中必不可少的一部分,飞行员根据飞行仪表表示的数据才能正确地做出判断。一般飞机仪表包括高度表+空速表+垂直速率表+姿态仪+航向指示表+转弯协调表。 这次要绘制的是其中的姿势仪,显示飞机相对于地平线的姿态,看姿态仪,飞行员能判断飞机姿态为偏左偏右,及偏上和偏下。姿态仪作用原理为一高度旋转的陀螺,不论飞机的姿态如何变化,此陀螺的定轴性在空间保持相同,因而...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 7023

java汉字转换国标码_GBK/GB2312编码问题分析以及java获取汉字国标码

import java.io.UnsupportedEncodingException;import java.util.regex.Matcher;import java.util.regex.Pattern;public class GBKEncodeUtil {/*** GB2312/GBK编码类** 机内码,区位码,国标码 三者间存在联系,由于机内码,国标码一般以四位十六进制的形式存在,...

weixin_39700548的博客 983

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java gbk转机内码_GBK/GB2312编码问题分析以及java获取汉字国标码

import java.io.UnsupportedEncodingException;import java.util.regex.Matcher;import java.util.regex.Pattern;public class GBKEncodeUtil {/*** GB2312/GBK编码类** 机内码,区位码,国标码 三者间存在联系,由于机内码,国标码一般以四位十六进制的形式存在,...

weixin_32534943的博客 762

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

汉字编码实验

在本实验中我学会了汉字编码的转换,国标转区位码的电路设计等等。最初让我感到困惑的就是汉字编码的一些概念,对机内码和国标码的理解还不到位导致后面设计困难。

ntr851217的博客 3423

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

字符编码(GB 2312、GBK、UTF-8、UTF-16)

GB 2312 GB 2312 是 1980 年发布的中文编码,共收录 7445 个字符,有 6763 个汉字以及 682 个非汉字字符,其中一级汉字 3755 个,二级汉字 3008 个。 GB 2312 采用双字节编码,两字节最高位均为 1,兼容 ASCII 码。 整个字符集分为 94 个区,每个区有 94 个位,7445 个字符被填入到这 94*94 个区位中。 每个区位上只有一个字符,因此...

L__ear的博客 5359

GBK、GB2312、iso-8859-1之间的区别

1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示"。 2. 编码基本

不知不觉已变淡 1万+

“深度学习“汉字国标码GB2312

GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符. GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75% 对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,需要使用GBK及GB18030汉字编码 一.规则 每个汉字有个二进制编码,叫汉字国标码. GB2312-80 GB2312将代码表分为...

junjuan131499的专栏 5298

UTF-8 GBK GB2312

问题研究<br />--字符集编码<br />1. 概述<br />本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。<br />在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示"。<br />2. 编码基本知识<br />最早的编码是iso8859-1,和as

javacaihai的专栏 2774

java获取文件编码

java编码 移位运算 获取文件编码

Benjamin 9539

unicode、GB2312、GBK

本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。     在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示"。 2. 编码基本知识     最

你的爱是我走不出的银河! 896

java 汉字区位码表,中文汉字编码知识及各种中文编码对应的编码区间总结

中文汉字编码知识汉字的编码体系主要有以下几种:⑴ 国标、区位、“准国标”国标是将七千余个汉字以及标点符号、外文字母等,排成一个94行、94列的方阵。方阵中每一横行称为一个“区”,每个区有94个“位”。一个汉字在方阵中的坐标,称为该字的区位码。为了与美标(ASCII)的形象码的范围重合,出现了“国标码”,即将区位码的两个十进制数都加上32,得到该汉字的国标码。当需要区分国标码和美标码时,出现了“准国...

weixin_28289089的博客 2120

JAVA字符编码系列三:Java应用中的编码问题

 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考。为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问题,特别是乱码问题,我觉得组成一个系列来描述和分析更好一些,包括三篇文章:第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础第二篇:JAVA字符编

qinysong的专栏 4万+

java 汉字区位码表_汉字编码解析

汉字编码解析一、汉字编码的种类汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。1 、GB2312又称国标码, 由国家标准总局发布, 1981 年 5 月 1 日实施,通行于大陆。新加坡等地也使用此编码。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共 7445 个图形字符,其中汉字占 6763 个。我们平时说 6768 个汉字,实际上里边有 5 个编码为空白...

weixin_30629043的博客 2327

GB2312 字符集

《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980。 GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。 基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区...

693
上一篇: 工厂模式
下一篇: 三阶魔方还原
慕一春
博客等级 码龄12年 19粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值