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

相关文章

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java