utf-8、gbk、unicode相互转码的几种方式

2024-08-30 01:08

本文主要是介绍utf-8、gbk、unicode相互转码的几种方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

utf-8、gbk、unicode相互转码的几种方式


以下代码是java对于常见编码方式进行相互转换的,主要是gbk和utf-8互转,gbk与uncode互转,utf-8与unicode互转。

package com.encoding.util;import java.io.UnsupportedEncodingException;
import java.lang.Character.UnicodeBlock;public class UtfAndGbk {/*** 第一种方法* utf-8转gbk* @param utf8* @return* @throws UnsupportedEncodingException*/public static String utf8ToGbk(String utf8) throws UnsupportedEncodingException {return new String(new String(utf8.getBytes("UTF-8"), "GBK"));}/*** 第一种方法* gbk转utf-8* @param utf8* @return* @throws UnsupportedEncodingException*/public static String gbkToUtf8(String utf8) throws UnsupportedEncodingException {return new String(new String(utf8.getBytes("GBK"), "UTF-8"));}/*** 第二种方法* gbk转utf-8   通过先转unicode,再转utf-8* @param utf8* @return* @throws UnsupportedEncodingException*/public static String gbk2utf8(String gbk) {  String l_temp = GBK2Unicode(gbk);  l_temp = unicodeToUtf8(l_temp);  return l_temp;  }  /*** 第二种方法* utf-8转gbk  通过先转unicode再转gbk* @param utf8* @return* @throws UnsupportedEncodingException*/public static String utf82gbk(String utf) {  String l_temp = utf8ToUnicode(utf);  l_temp = Unicode2GBK(l_temp);  return l_temp;  }  /** * gbk转unicode* @param str * @return String */  public static String GBK2Unicode(String str) {  StringBuffer result = new StringBuffer();  for (int i = 0; i < str.length(); i++) {  char chr1 = (char) str.charAt(i);  if (!isNeedConvert(chr1)) {  result.append(chr1);  continue;  }  result.append("\\u" + Integer.toHexString((int) chr1));  }  return result.toString();  }  /** *  unicode转gbk* @param dataStr * @return String */  public static String Unicode2GBK(String dataStr) {  int index = 0;  StringBuffer buffer = new StringBuffer();  int li_len = dataStr.length();  while (index < li_len) {  if (index >= li_len - 1  || !"\\u".equals(dataStr.substring(index, index + 2))) {  buffer.append(dataStr.charAt(index));  index++;  continue;  }  String charStr = "";  charStr = dataStr.substring(index + 2, index + 6);  char letter = (char) Integer.parseInt(charStr, 16);  buffer.append(letter);  index += 6;  }  return buffer.toString();  }  public static boolean isNeedConvert(char para) {  return ((para & (0x00FF)) != para);  }  /** * utf-8 转unicode *  * @param inStr * @return String */  public static String utf8ToUnicode(String inStr) {  char[] myBuffer = inStr.toCharArray();  StringBuffer sb = new StringBuffer();  for (int i = 0; i < inStr.length(); i++) {  UnicodeBlock ub = UnicodeBlock.of(myBuffer[i]);  if (ub == UnicodeBlock.BASIC_LATIN) {  sb.append(myBuffer[i]);  } else if (ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {  int j = (int) myBuffer[i] - 65248;  sb.append((char) j);  } else {  short s = (short) myBuffer[i];  String hexS = Integer.toHexString(s);  String unicode = "\\u" + hexS;  sb.append(unicode.toLowerCase());  }  }  return sb.toString();  }  /** *  unicode转utf-8* @param theString * @return String */  public static String unicodeToUtf8(String theString) {  char aChar;  int len = theString.length();  StringBuffer outBuffer = new StringBuffer(len);  for (int x = 0; x < len;) {  aChar = theString.charAt(x++);  if (aChar == '\\') {  aChar = theString.charAt(x++);  if (aChar == 'u') {  // Read the xxxx  int value = 0;  for (int i = 0; i < 4; i++) {  aChar = theString.charAt(x++);  switch (aChar) {  case '0':  case '1':  case '2':  case '3':  case '4':  case '5':  case '6':  case '7':  case '8':  case '9':  value = (value << 4) + aChar - '0';  break;  case 'a':  case 'b':  case 'c':  case 'd':  case 'e':  case 'f':  value = (value << 4) + 10 + aChar - 'a';  break;  case 'A':  case 'B':  case 'C':  case 'D':  case 'E':  case 'F':  value = (value << 4) + 10 + aChar - 'A';  break;  default:  throw new IllegalArgumentException(  "Malformed   \\uxxxx   encoding.");  }  }  outBuffer.append((char) value);  } else {  if (aChar == 't')  aChar = '\t';  else if (aChar == 'r')  aChar = '\r';  else if (aChar == 'n')  aChar = '\n';  else if (aChar == 'f')  aChar = '\f';  outBuffer.append(aChar);  }  } else  outBuffer.append(aChar);  }  return outBuffer.toString();  }  
}


这篇关于utf-8、gbk、unicode相互转码的几种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119364

相关文章

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1