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

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API