zoukankan      html  css  js  c++  java
  • 字符乱码问题小结

    在工作中,有时会遇到一些字符编码上的问题,一旦文件的编码格式与源文件的编码格式不一致,代码中的一些字符(大多数情况下是中文)就很有可能会出现乱码现象。当时,自己经验不足的时候,要解决这类问题,也常常会让自己耗费不少的时间,现在,根据一些资料来作出一些整理,以便日后的工作中可以更有效率地解决重复问题。

    一 常用的字符编码

    首先介绍一下计算机中一些主流常见的编码。

    1.1 GBK & GB2312 (中文)

    • GB2312
      它是一个简体中文字符集,由 6763 个常用汉字和 682 个全角(指一个字符占用两个标准字符位置的状态)的汉字字符组成。
      GB2312 编码使用两个字节(8位2进制)表示一个汉字,理论上最多可以表示 256 * 256 = 65536 个汉字。这个编码仅在中国可以正常使用,如果是其它国家的网友访问你使用 GB2312 编码的网站,就会出现乱码显示,因为他们的浏览器并不是使用 GB2312 编码格式。

    • GBK
      GBK 主要是为了解决 GB2312 不能表示的生僻字而出现的。

    1.2 Unicode(UTF-8 & UTF-16 & UTF-32)

    Unicode 编码也称为万国码,它是计算机科学领域的一项业界标准。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

      Unicode 比 ANSI 好用。现在 WIN 的系统内核开始完全支持并完全应用 Unicode 编写,所有 ANSI 字符在进入底层之前,都会被 API 转换成 Unicode。基于此,所以你一开始就是用 Unicode 编码就可以减少转换的用时和 RAM 开销。
      另外在语言中 JAVA / .NET 内置的字符串所使用的字符集已经完全是 Unicode。最重要的是,现在世界上大多数程序用的字符集都是 Unicode。
    

      不过 Java 中 Unicode 使用 16 进制编码(可以使用 UTF-8 解决),编码太庞大会造成网络传输的负担。

    1.3 ISO8859-1

      ISO8859-1 是国际通用编码,一般只有字母就使用此编码格式。它是单字节编码,向下兼容 ASCII,其编码范围是0x00-0xFF。

    二 乱码出现的分析

      可以使用下面这段代码,查看系统的属性列表:

    1. public class Test{
    2. publicstaticvoid main(String[] args){
    3. System.getProperties().list(System.out);
    4. }
    5. }

      运行此代码,结果如下(截取部分内容):

    … …
      同时,应该需要注意这个属性:

      需要明白乱码出现的本质:其实就是编码格式和解码格式不一致造成的。





  • 相关阅读:
    综合练习-词频统计
    组合数据类型综合练习
    Python综合练习
    PostOrder_Traversal 二叉树的非递归后序遍历
    PAT甲级-1152-Google Recruitment(20 分)
    PAT甲级-1007-Maximum Subsequence Sum (25 分)
    macOS MOjave运行pygame不显示图像-解决方案
    PAT甲级-1004-Counting Leaves(30 分)
    Python进阶-Numpy科学计算库(简单入门)
    回文日期
  • 原文地址:https://www.cnblogs.com/archy2016/p/7384938.html
Copyright © 2011-2022 走看看