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

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):