java中utf8转成gbk,java中GBK转UTF-8乱码的解决方法

article/2025/6/17 3:25:55

d247244620c9f94d31daff2249fe6c0a.png

java中GBK转UTF-8乱码的解决方法

如果自己采用的是GBK编码,对方采用得到是UTF-8编码,发送数据时需要将GBK编码数据转换成UTF-8编码数据,这样对方才不会乱码。

问题出现:GBK转UTF-8时,奇数个中文会乱码,偶数个中文不会乱码。

原因分析:

public static void analyze() throws UnsupportedEncodingException {String gbk = "我来了";String utf8 = new String(gbk.getBytes("UTF-8"));for (byte b : gbk.getBytes("UTF-8")) {System.out.print(b + " ");}System.out.println();for (byte b : utf8.getBytes()) {System.out.print(b + " ");}}/*-26 -120 -111 -26 -99 -91 -28 -70 -122-26 -120 -111 -26 -99 -91 -28 -70 63 !*/

注意最后一个字节不同,上面一行才是正确的UTF-8编码。那么为什么下面一行最后一个字节是63,而不是-122呢?这就是导致乱码的原因所在。

GBK编码是一个中文2个字节,而UTF-8编码是一个中文3个字节,当我们调用getBytes("UTF-8")方法时,会通过计算来增加字节,使得从GBK的2个字节变成UTF-8对应的3个字节。因此,上例3个中文输出了9个字节。

(相关视频教程分享:java视频教程)

解决问题

保证字节正确才是硬道理。当调用getBytes("UTF-8")转换成字节数组后,创建ISO-8859-1编码的字符串,ISO-8859-1编码是一个字节对应一个字符,因此不会使最后一个字节错误。

public static void correctEncode() throws UnsupportedEncodingException {String gbk = "我来了";String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1");for (byte b : iso.getBytes("ISO-8859-1")) {System.out.print(b + " ");}System.out.println();//模拟UTF-8编码的网站显示System.out.println(new String(iso.getBytes("ISO-8859-1"),"UTF-8"));}/*-26 -120 -111 -26 -99 -91 -28 -70 -122我来了*/


http://chatgpt.dhexx.cn/article/Ai95EsgX.shtml

相关文章

notepad批量转换文件编码utf8、gbk

从网上找了多个编码转换工具,自己也尝试写、从网上找python脚本,对文件进行批量转换,但转换结果都不理想,大部分文件都可以正常转换成UTF8,但少量文件转换后可能出现中文乱码的情况。 经过多次尝试,发现使…

esp32使用查表法utf8转gbk

查表法utf8转gbk 前言制作bin文件添加代码 前言 由于要使用esp32获取天气信息,从服务器返回的json文件编码格式为utf8格式,而我制作的字库为gb2312字库,中文会出现乱码。在网上找了很久,最简单的方法是查表法,由于utf…

UTF-8和GBK互转问题

文章目录 前言一、UTF-8、GBK、GB2312、Unicode二、转换原理1.背景2.UTF-8编码规则 总结 前言 遇到UTF-8和GBK互转问题,稍微记录一下重点~ 一、UTF-8、GBK、GB2312、Unicode GBK:《汉字内码扩展规范》。简体繁体均支持。 GB2312:《信息交换…

Linux操作系统:vim编辑器常用命令

文章目录 前言vim的基本概念vim的基本操作vim正常模式命令集(1)复制与粘贴(2)删除(3)光标移动和定位(4)撤销与反撤销 vim底行模式命令集(1)查找(2…

7.0、Linux-Vim编辑器以及常用命令详解

7.0、Linux-Vim编辑器以及常用命令详解 什么是 Vim 编辑器 -> Vim 是从 vi 发展出来的一个文本编辑器;代码补全、编译以及错误等方便编程的功能特别丰富,在程序员中被广泛使用;简单的来说,vi 是老式的字处理器,不过…

Linux之vi和vim编辑器常用命令

一、一般模式 以vi打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理…

Linux中vi/vim编辑器的常用命令

文章目录 前言vi文本编辑器三种模式命令模式(Command mode)移动光标命令查询命令切换到INTERT切换到VISUAL 输入模式(Insert mode)末行模式(Last line mode) cat 文件名 ——查看文件 vi 文件名 ——编辑文件 vim 文件名 ——编辑文件前言 不掌握vi/vim命令,都不…

Linux中vim编辑器常用命令、文件查找、磁盘挂载、用户管理

Vim 介绍 Vim 是全屏幕纯文本编辑器,是vi编辑器的升级版。 vim 不仅仅兼容vi所有的命令,而且高亮显示,vi只能运行在 UNIX 和 Linux 中,而 vim 可以跨平台运行在Windows,MAC OS 中。 vim 号称 “编辑器之神”&#x…

LINUX-VIM编辑器常用命令大全(超全)

工作模式切换: 按TAB键命令自动补全!!! 一、编辑模式和一般模式常用命令 语法命令功能描述yy复制光标当前一行y 数字 y复制一段(从第几行到第几行)p箭头移动到目的行粘贴u撤销上一步dd删除光标当前行d 数字…

vim编辑器常用命令 (Centos)

1 安装vim编辑器 sudo yum update sudo yum install vim2 设置vim 显示行号 (:set nu) 步骤1:按 ESC 键 退出本机内容模式 步骤2:输入 :set number 或者 :set nu 步骤3:按回车 3 查找 / 步骤1:按 ESC 键 退出本机内容模式 步…

Linux虚拟机中vim编辑器常用命令介绍(二)

1.撤销和恢复撤销: u(undo):撤销上次命令 Ctrlr(redo):恢复撤销的命令(重做) 2.删除文本 x(cut):删除光标所在字符,或者选中文字(5x,删除光标…

Linux虚拟机中vim编辑器常用命令介绍(一)

1.行数移动: 命令 英文 功能 gg go 文件顶部 G go 文件末尾 数字gg go 移动到数字对应行数 数字G go 移动到数字对应行数 :数字 移动到数字对…

10 分钟上手 Vim 编辑器,常用命令大盘点!

点击蓝字 关注我们 #扫码加入专属群# 有诸多福利等你来拿~ 传闻有 240 万的程序员不知道如何退出 Vim 编辑器,真的有这么困难吗?下面给大家整理了一份 Vim 常用命令,让你 10 分钟快速上手 Vim,溜得飞起! 以下命令请在普…

vim编辑器常用命令介绍

本文是对vim各种命令的使用介绍,旨在让大家快速学习掌握 什么是vim vim是Linux环境下一款功能强大、高度可定制的文本编辑工具 vim的工作模式 一般分为6种 普通模式用vim打开一个文件时默认模式,也叫命令模式,允许用户通过各种命令浏览代…

正态总体均值假设检验

单个正态总体均值的检验 (1)sigma已知的u检验(Z检验) #######Z检验 Z检验条件 1.样本量大于30 2.数据之间彼此独立 3.数据正常分布 4.样本量应该相等#单正态总体,方差已知 from scipy import stats from statsmodels.stats import weights…

数学建模之正态分布均值的假设检验

正态分布均值的假设检验 一,假设检验步骤 步骤一:写出原假设和备择假设 步骤二:在原假设成立的条件下,构造一个统计量,该统计量服从某一分布 步骤三:用已知的样本数据带入统计量的公式,得到…

数理统计-假设检验

假设检验 假设检验:根据样本的信息来判断总体是否具有指定的特征。 假设检验可以分为:参数假设检验和非参数假设检验。 1)参数假设检验问题,对总体X的分布函数中的未知参数a,设a的真值为a0,如何通过样本信息检验这个假设? 参数假设检验一般有:单个正太总体参数的假设…

线性回归中的假设检验

线性回归中的假设检验及Python编程 0 引言1 一元线性回归模型2 对于回归方程的检验F检验T检验 一元线性回归的Python编程实现与 statsmodels 包的对比关于多元线性回归 0 引言 本文介绍一元线性回归的基本假设,推导方法和统计检验,然后介绍Python编程实…

概率论:假设检验

http://blog.csdn.net/pipisorry/article/details/51182843 假设检验 假设检验问题分为两类,一类是参数的假设检验,一类是分布的假设检验! 设总体X的分布未知,或 X的某个分布参数 theta未知,对总体分布或分布参数 theta 提出一个假设 "H0" ,然后根据样本所提供的信息…

假设检验之几种检验方法的比较

之前学习概率论与数理统计的时候就不扎实,导致后来面试官在问我什么时候该用什么检验的时候稀里糊涂,最近工作中又遇到了假设检验的问题,所以就想把假设检验这块好好总结一下。 一.什么是假设检验? 假设检验是用来判断样本与样本…