字符串中的生僻字在传输和存储的过程中存在着各种各样的问题,为了便于传输和存储,我们通常会把这些生僻字转换为16进制编码进行传输和存储。
package com.dc.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; /* ****************** 类说明 ********************* * class : RareWordUtil * @author : ncc * create time : 2017-12-20 上午09:49:54 * @version : 1.0 * description : 生僻字与16进制编码相互转化 * @see : * ************************************************/ public class RareWordUtil { private static Map<String, String> nameToValue; private static Map<String, String> valueToName; private String fileName = "gbk.txt"; private String fileEncoding = "GBK"; private final String preFix = "■△"; private static final RareWordUtil cr_instance = new RareWordUtil(); /** * 构造方法 */ private RareWordUtil() { try { init(); } catch (IOException e) { System.out.println(e.getMessage()); } } /* ******************************************** * method name : getInstance * description : 获取实例 * @return : RareWordUtil * @param : @return * modified : ncc , 2017-12-20 * @see : * ********************************************/ public static RareWordUtil getInstance() { return cr_instance; } /* ******************************************** * method name : init * description : 初始化 * @return : void * @param : @throws IOException * modified : ncc , 2017-12-20 * @see : * ********************************************/ @SuppressWarnings( { "static-access", "unchecked" }) private void init() throws IOException { if (nameToValue != null && valueToName != null) { return; } InputStream input = RareWordUtil.class.getResourceAsStream(fileName); InputStreamReader inputsr = new InputStreamReader(input, Charset.forName(fileEncoding)); BufferedReader br = new BufferedReader(inputsr); this.nameToValue = new HashMap(); this.valueToName = new HashMap(); String line = null; while ((line = br.readLine()) != null) { String ret = new String(line.getBytes(fileEncoding), fileEncoding); String key = ret.substring(0, 1); String value = ret.substring(line.length() - 4, line.length()); this.nameToValue.put(key, value); this.valueToName.put(value, key); } } /* ******************************************** * method name : getRareWord * description : 将含16进制编码的字符串转化成含生僻字的字符串 * @return : String * @param : @param value * @param : @return * modified : ncc , 2017-12-20 * @see : * ********************************************/ @SuppressWarnings("static-access") public String getRareWord(String value) { StringBuffer sb = new StringBuffer(); int pos = -1; while ((pos = value.indexOf(preFix)) != -1) { sb.append(value.substring(0, pos)); String code = value.substring(pos + preFix.length(), pos + preFix.length() + 4); String codeValue = this.valueToName.get(code); sb.append(codeValue); value = value.substring(pos + preFix.length() + 4, value.length()); } sb.append(value); return sb.toString(); } /* ******************************************** * method name : getHex * description : 将含生僻字的字符串转化成含16进制编码的字符串 * @return : String * @param : @param name * @param : @return * modified : ncc , 2017-12-20 * @see : * ********************************************/ @SuppressWarnings("static-access") public String getHex(String name) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < name.length(); i++) { String value = this.nameToValue.get(name.substring(i, i + 1)); if (value == null) { sb.append(name.substring(i, i + 1)); } else { sb.append(preFix + value); } } return sb.toString(); } public static void main(String[] args) { RareWordUtil cu = RareWordUtil.getInstance(); String name = "王喆昊"; name = cu.getHex(name); System.out.println("Cent2Dollar(1) = " + name); name = cu.getRareWord(name); System.out.println("Cent2Dollar(1) = " + name); } }
代码中用的的txt文件见附件。
相关推荐
在编程领域,尤其是在涉及到字符编码的时候,理解和操作16进制Unicode字符与汉字之间的转换是一项基本技能。在C#环境中,这项任务可以通过内置的类库和方法来实现。本工具正是针对这一需求,提供了一个方便的C#实现...
在Visual Studio 2010中,可以创建一个新的C# Class Library项目,然后定义一些方法来处理生僻字,如转换编码、验证生僻字、显示生僻字列表等。例如,可以创建一个静态类`RareCharacterHelper`,并提供如`...
在这个“汉字与unicode编码(十六进制)对照表”中,我们可以找到汉字与其对应的Unicode编码,这对于编程、文本处理以及国际化和本地化工作来说具有重要的参考价值。 Unicode编码系统包括多个平面,其中基本多文种...
//ansi 字符转为 unicode 十进制值 function int MultiByteToWideChar(uint codepage, ulong dwflags, ref string lpmultibytestr, intcchmultibyte, ref long lpwidecharstr, int cchwidechar) library "kernel32...
4. 为了避免生成生僻字,还需要排除D7区之后的编码,因为这些编码通常包含不常见的汉字。 需要注意的是,生成的随机汉字验证码还应考虑到易读性,避免使用用户难以识别或输入的字符。此外,可以结合数字和英文字符...
编码过程将汉字转换为特定的二进制码,以便在单片机中存储和处理。 2. **点阵字库**:汉字在显示屏上以像素点阵的形式显示,常见的有16x16和24x24点阵。每个汉字由对应点阵的二进制数据组成,这些数据存储在单片机...
需要注意的是,由于GB2312编码只能覆盖有限的中文字符,对于不包含在GB2312中的Unicode字符(如繁体字、生僻字或后来添加的汉字),转换可能会丢失信息。因此,在现代Web开发中,更推荐使用UTF-8编码,因为它能支持...
2. 将这两个16进制数转换为字节数组。 3. 使用Encoding类的GetString()方法将字节数组解码为汉字字符。 4. 重复以上步骤,生成所需数量的汉字字符,组合成验证码字符串。 5. 添加干扰元素,如扭曲、加噪等,增加机器...
编码是字符集与二进制数据之间的转换规则,不同的系统或软件可能默认使用不同的编码格式,如UTF-8、GBK(GB2312的扩展)、UTF-16等。 ### 1. 编码识别与设置 为了解决C#中汉字乱码的问题,关键在于正确识别文件的...
GBK是在GB2312基础上扩展的,增加了许多生僻字和繁体字,支持20902个汉字,兼容GB2312编码。 3. **Big5编码** Big5编码主要用于台湾和香港地区,主要针对繁体字,它也是一个双字节编码系统,包含了约13000个汉字。...
GBK是GB2312的扩展,是中国大陆广泛使用的汉字编码标准,它包含了大部分常用汉字和部分生僻字,使用双字节编码,共能表示20902个字符。GBK是在ASCII的基础上扩展的,因此GBK编码的前128个字符与ASCII相同。 在STM32...
函数通过计算GBK编码的十进制值,并将其与预定义的GBK码段区间进行比较,从而确定对应的首字母。例如,对于字符串"中国人",它会返回"Z",即"中"的拼音首字母。 函数定义如下: ```sql CREATE FUNCTION `...
这对于输入生僻字或者不常见的汉字特别有用,特别是在没有拼音输入法的年代。 文字加密则与区位码查询有关联,因为任何字符编码都可能涉及加密。在传输或存储包含汉字的数据时,为了保护信息安全,有时会采用加密...
GB2312编码包含了6763个常用汉字,GBK则在此基础上增加了许多繁体字和生僻字。在STM32中,汉字通常以点阵形式存储,例如HZK16就是一种16x16像素的汉字点阵库。这种库包含了大量的汉字点阵数据,每个汉字由16行16列的...
Unicode最常用的编码形式是UTF-16,即使用两个字节来表示大多数字符,但某些特殊字符(如生僻字)可能需要四个字节。 - **UTF-8**是一种可变长度的编码方式,能够兼容ASCII并有效地编码Unicode字符。对于常见的英文...
除了汉字之外,GB2312字符集中还包含了希腊字母、日文平假名和片假名字母、俄语西里尔字母等其他字符,但不支持繁体汉字和一些生僻字。GB2312的兼容性较差,无法覆盖更多的汉字和符号,因此在后续的发展中被其他更...
内容部分展示了一部分汉字的Unicode编码,例如“一”的Unicode编码是0x4E00,转换成十进制是19968。值得注意的是,ASCII编码是Unicode的一个子集,ASCII编码的字符在Unicode编码中仍然保持一致,比如字母"a"在ASCII...
在计算机中,作为一个整体被传送和运算的一串二进制码叫做计算机字 计算机字是指在计算机中作为一个整体处理的数据单位。这个单位的大小通常与处理器的字长一致。 #### 19. 在磁盘中的程序是以文件的方式来存储的...