中文乱码问题总结

本文仅是对原文进行了再排版。

类型实例字符编码类型解码类型原因描述
问号??JavaISO8859-1UTF-8中文字符采用了ISO8859-1进行编码,然后经过UTF-8解码。
中文变问号的乱码情况是非常常见的,大部分开源软件的默认编码设置成了ISO8859-1,这点需要格外注意。
符号ä½ å¥½UTF-8/GBKISO8859-1对中文字符先用UTF-8编码或GBK编码,再由ISO8859-1解码,就会变成奇怪字符。对照ISO8859-1编码表后发现:e4 bd a0分别对应三个字符:"ä½ “,e5 a5 bd分别对应三个字符"好”,
复杂中文,日韩文浣犲ソJavaUTF-8GBK中文字符用UTF-8进行编码,然后用GBK解码就得到了"复杂中文"。同理,如果GBK编码的中文用UTF-8来解码的话,同样会出现乱码问题。
口字码��GBKUTF-8以UTF-8编码读取GBK编码数据
黑色菱形问号��你好JavaUTF-16BEUTF-8中文字符用UTF-16BE进行编码,然后用UTF-8解码。
首先问号+黑色菱形的字符是Unicode中的"REPLACEMENT CHARACTER",该字符的主要作用是用来表示不识别的字符。 所以产生乱码的原因可能有很多,下面通过原字符串:“你好Java”,重现一种乱码方式:原字符串:String str = "你好Java"经过UTF-16BE编码后对应的字节序列:fe ff 4f 60 59 7d 0 4a 0 61 0 76 0 61
其中"fe ff"就是字节流起始的BOM标识符。“fe ff"在Unicode标准中属于"noncharacters”,只用于内部使用。所以在使用UTF-8解码输出该字节序列的时候,没有该码元对应的字符,对于不识别字符,就会用��替代。
拼音码бéÖÃöaoÃoÃNsI°iiioéGBKISO8859-1
问句码由月要好好学习天天向??UTF-8UTF-8UTF-8=>GBK=>UTF-8
以GBK方式读取UTF-8编码的中文,然后又用UTF-8的格式再次读取
字符串长度为偶数时正确,长度为奇数时最后的字符变为问号
锟斤拷锟斤拷锟斤拷要锟矫猴拷学习锟斤拷锟斤拷锟斤拷GBKGBKGBK=>UTF-8=>GBK
以UTF-8方式读取GBK编码的中文,然后又用GBK的格式再次读取
全中文字符,且大部分字符为"锟斤拷”这几个字符
参考文档:

UTF-16BE、UTF-16LE、UTF-16 三者之间的区别_utf16le和utf16be-CSDN博客

起因:

换公司,从头搭服务,对接SAP系统,接口调通,中文乱码。莫名其妙的,引apache的包,默认编码是ISO-8859-1

import org.apache.http.entity.StringEntity;
import cn.hutool.json.JSONObject;

……

		JSONObject jsonObject = new JSONObject();
        jsonObject.put("header", paramHeader);
        jsonObject.put("lists", paramList);

        String string = jsonObject.toString();
		//不传编码类型,使用默认值IOS-8859-1
		//StringEntity entity = new StringEntity(string);
        StringEntity entity = new StringEntity(string, StandardCharsets.UTF_8);
……
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值