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

相关文章

java中4种API参数传递方式统一说明

《java中4种API参数传递方式统一说明》在Java中,我们可以使用不同的方式来传递参数给方法或函数,:本文主要介绍java中4种API参数传递方式的相关资料,文中通过代码介绍的非常详细,需要的... 目录1. 概述2. 参数传递方式分类2.1 Query Parameters(查询参数)2.2 Path

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

MybatisPlus中几种条件构造器运用方式

《MybatisPlus中几种条件构造器运用方式》QueryWrapper是Mybatis-Plus提供的一个用于构建SQL查询条件的工具类,提供了各种方法如eq、ne、gt、ge、lt、le、lik... 目录版本介绍QueryWrapperLambdaQueryWrapperUpdateWrapperL

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

java敏感词过滤的实现方式

《java敏感词过滤的实现方式》文章描述了如何搭建敏感词过滤系统来防御用户生成内容中的违规、广告或恶意言论,包括引入依赖、定义敏感词类、非敏感词类、替换词类和工具类等步骤,并指出资源文件应放在src/... 目录1.引入依赖2.定义自定义敏感词类3.定义自定义非敏感类4.定义自定义替换词类5.最后定义工具类