public
static
void
main
(
String
[
]
args
)
{
try
{
byte
[
]
b_GBK
=
"中国"
.
getBytes
(
"GBK"
)
;
byte
[
]
b_UTF8
=
"中国"
.
getBytes
(
"UTF-8"
)
;
byte
[
]
b_ISO88591
=
"中国"
.
getBytes
(
"ISO8859-1"
)
;
System
.
out
.
println
(
new
String
(
b_UTF8
,
"UTF-8"
)
)
;
System
.
out
.
println
(
new
String
(
b_UTF8
,
"ISO8859-1"
)
)
;
System
.
out
.
println
(
new
String
(
b_ISO88591
,
"UTF-8"
)
)
;
}
catch
(
Exception e
)
{
e
.
printStackTrace
(
)
;
运行结果如下:
ä¸å›½
第二行乱码因为:编码UTF-8,解码ISO8859-1,编解码所用的字符编码方式不一致
第三行乱码因为:编码ISO8859-1,解码UTF-8,同上
只要保持编解码所用的字符编码方式一致就可以避免乱码
但有时会遇到我们获取到的数据已经按错误的字符编码方式解码的情况,比如从redis中获取出来的就是错误的编码方式 ,那么如何复原呢?
解决方案:
1.按错误字符编码方式编码(复原为原始byte数组)
2.按正确字符编码方式解码
byte[] b_utf = "中国".getBytes("UTF-8");
String before = new String(b_utf, "ISO8859-1");
System.out.println("before = " + before);
byte[] b_iso = before.getBytes("ISO8859-1");
String after = new String(b_iso, "UTF-8");
System.out.println("after = " + after);
最近项目开发中出现二进制byte转String类型出现乱码问题:乱码问题根源:编码与解码所用的字符编码方式不一致示例代码如下:/** * @Author: chuxia0811 * @Date: 2021/7/17 10:56 * @Description : */public class Byte2String { public static void main(String[] args) { try { byte[] b_GBK = "中
public static void main(String[] args) throws UnsupportedEncodingException {
byte bytes[] = new byte[256];
for (int i = 0; i < 256; i++)
bytes[i] = (byte)i;
C# string byte数组转换解析
C# string byte数组转换实现的过程是什么呢?C# string byte数组间的转换需要注意什么呢?C# string byte数组间转换所涉及的方法是什么呢?让我们来看看具体的内容:
C# string byte数组转换之string类型转成byte[]:
byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str );
反过来,byte[]转成string:
string str = System.Text.Encoding.Default.GetString ( byteArray );
其它编码方式的,如System.Text.UTF8Encoding,System.Text.UnicodeEncoding class等;例如:
string类型转成ASCII byte[]:("01" 转成 byte[] = new byte[]{ 0x30, 0x31})
1 byte[] byteArray = System.Text.Encoding.ASCII.GetBytes ( str );
ASCII byte[] 转成string:(byte[] = new byte[]{ 0x30, 0x31} 转成 "01")
2 string str = System.Text.Encoding.ASCII.GetString ( byteArray );
有时候还有这样一些需求:
byte[] 转成原16进制格式的string,例如0xae00cf, 转换成 "ae00cf";new byte[]{ 0x30, 0x31}转成"3031":
本文建议阅读时长:15mins
前记:最近笔者工作比较繁忙,导致本来应该有很多博客需要填坑,一直也没有静下心来好好整理下,今天蹭着夜深人静加之阵阵柔和的轻音乐正好先写上一篇,也算是为自己乱码专栏开个头,当然本专栏主要解决Tomcat服务器以及一些国产中间件再应用使用过程中的乱码情况的总结和原理解释,该篇作为乱码专栏的第一篇。
回归正题:先说一下今天的出错场景,业务在前端传递String对象到后台,后台在将获取String对象将其转化为byte数组,存入数据库的一个...
1.出现场景:
netty客户端向服务端传输json字符串转为byte字节数组后的数据,但是服务器端接收到的后经过hexStr2Str转为10进制字符串后是乱码的json字符串,自然反序列化后的对象里的字段值也是乱码的。
2.罪魁祸首
outData.writeBytes(data.getBytes());
data是json字符串
3.getByte() 方法解读
* Encodes this {@code String} into a sequence of byte
底层json由于很长,所以分成多次发送,我每次接受到一部分就
new String(),最后再把多个
String拼接成一个json数组,刚开始系统运行良好,后来莫名其妙就会
出现乱码,最后发现是
new String()出现的
问题,这里做一个模拟;
1、json数组
"a": "我们来自不同的世界"
2、解析通过to
Bytes之后的数组
String a1 = "{\n" +
" \"a\": \"我们来自不同的世界\"\n" +
//使用指定的字符集将此
String编码为字节数组
byte[] b_GBK = "你".get
Bytes("GBK");
byte[] b_UTF8 = "你".get
Bytes("UTF-8");
byte[] b_ISO88591 = "你".get
Bytes("ISO8859-1");
//对字节数组按照指定的字符集解码
当我们想把字符串转化为某种类型的编码格式时,容易出现乱码;比如下面的代码,很容易造成误区,getByte里面的gbk编码到底是编码还是解码;调用这个方法前,字符串之前编码了没;怎么还原字符串等等
1.示例演示 String testStr="I love 中国";
byte[] bytes = testStr.getBytes("gbk");
Strin