Java中的中文字符编码问题

只要你了解过或学过计算机,那你肯定非常清楚现在的计算机里头处理的就是二进制数据,就是一堆0和1,更具体来说就是一堆数字。但是计算机只能表示数字给我们看用处少了点,我们人肯定是想看到计算机可以处理以及表示我们所使用的各种语言文字啊,但计算机肯定是不能直接懂我们所用的文字,它只懂数字。

所以要通过间接的手段来解决这个问题,解决方案就是我们人自己制定一套编码规则,思路很简单:
创建存储一套字符集,给字符集内的每个字符都指定一个数字编号。

当然,实际情况当然要比这个复杂得多,但这是最通俗的思路。这样,通过这些编号,人与计算机的交互,对于人来说就更方便更人性化了。通俗类比来说正如给一个书的每一页都指定一个数字编号,我们称它为页码,现在我们人给计算机中所存储的字符集的字符都指定一个数字编号,我们称它为
字符编码(character encoding)

综上所述:人需要计算机“懂”人所用的自然语言文字,方便我们人与计算机进行交互,那就必须给存储于计算机中的自然语言的每个文字都编个号。

字符集与字符编码的区别

一般概念上来说:

  • 字符集(character set/charset)指的是

常用的字符集以及字符编码

既然现在了解到为何要编码,那现在就来看看已经存在并且被广泛使用的字符集以及字符编码吧。

Java Web中的编码问题

请求参数

我们平时最常用的就是通过 GET
POST
方式来提交请求参数,解决这两者所引发的编码问题的手段是有所不同的。

public class Connector extends LifecycleMBeanBase  {
	private Charset uriCharset = StandardCharsets.UTF_8;

	protected boolean useBodyEncodingForURI = false;

	public Connector(String protocol) {
        if (Globals.STRICT_SERVLET_COMPLIANCE) {
            uriCharset = StandardCharsets.ISO_8859_1;
        } else {
            uriCharset = StandardCharsets.UTF_8;
        }
    }

    /**
     * @return the name of character encoding to be used for the URI using the
     * original case.
     */
    public String getURIEncoding() {
        return uriCharset.name();
    }

    /**
     * @return the true if the entity body encoding should be used for the URI.
     */
    public boolean getUseBodyEncodingForURI() {
        return this.useBodyEncodingForURI;
    }

    /**
     * Set if the entity body encoding should be used for the URI.
     *
     * @param useBodyEncodingForURI The new value for the flag.
     */
    public void setUseBodyEncodingForURI(boolean useBodyEncodingForURI) {
        this.useBodyEncodingForURI = useBodyEncodingForURI;
        setProperty("useBodyEncodingForURI", String.valueOf(useBodyEncodingForURI));
    }
}

原文 

https://extremegtr.github.io/2017/11/08/Chinese-character-encode-problem-in-java/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java中的中文字符编码问题

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址