解决中文编码问题的四个注意点

简介:



本文转自 xhinkerx 51CTO博客,原文链接:http://blog.51cto.com/xhinker/125456,如需转载请自行联系原作者网站中如果涉及到东亚语音,比如中文,日语等,就不得牵扯到字符的编码问题,这本来是一个历史问题,到如今却成为了一个软件开发的大问题。几乎做过 B/S 开发的人都遇到过字符乱码问题。那么 UTF-8 不是支持全球所有语言吗?理论上是的,但是在中国, gb2312 GBK 等字符集已经活得了广泛的使用,而 GBK gb2312 UTF-8 的编码又是不一样的。正是因为编码的混乱,造成开发时经常会出现乱码。
        那么如果解决这个问题呢?
        要统一四方面的编码(有的人仅仅在 页面中加入一些代码就声称解决编码问题,其实根本没有解决真正的问题所在)。
        第一方面,就是开发人员在编写代码的时候所使用的编码方式,这很重要。如果在程序中使用硬编码的方式写入一些静态文本,在本机似乎看起来一切正常,可是到了另一台电脑,情况可能就完全不同了。要知道 B/S 结构的软件是面向全球的,有谁会知道对方在使用那种编码呢?比如现在一般常用的 IDE 使用的默认编码是 UTF-8 , 在软件完成之后,在另一个只支持 gb2312 的编码里有可能就是一串乱码。如果程序中涉及到中文的硬编码,最好将编辑器的字符集设置为 GBK 因为 GBK 对英文字符编码方式是兼容的,这样在国外可以看到英文,国内也可以看到中文,这种做法对于面向国内用户的网站来说是最好的做法了,如果主要是面向国外,则使用默认的 UTF-8 是最好的选择。
        第二方面,输入法的编码设置,很多人在被乱码问题弄得头晕的时候往往不会意识到自己的输入法有问题。其实中文在输入的时候,输入法肯定要选择一种字符集进行编码的,如果输入法的字符集是 UTF-8  那么只支持 GBK gb2312 的浏览器显示的肯定会是乱码,解决方式如上,将输入法的字符集设置为 GBK 以获得最好的兼容性。
        第三方面,数据库的字符编码设置,就拿 MySql 来说,在安装配置的时候, Mysql 会提示用户选择某一个特定的字符集,对于使用中文的软件来说,选择 GBK 仍旧是最好的选择。
        第四方面, java 虚拟机编译时的字符集设置,如果输入的是 GBK  而编译 JSP 使用的是 UTF-8 的话,那么一切又都乱了。所以可以在编译参数里写入
       -encoding GBK
        这样一切都是 GBK 格式,中文的现实才被解决了,当然也可以全部设置为 UTF-8 或者 GB2312  对于国内网站来说 GBK 仍旧是最佳选择。但不管选择哪种方式,一定要让这四个方面的编码方式保持一致,否则乱码随时都有可能出现。
        编码问题不是一时半会所能解决的。即使以上这四个方面都做到了,在美国的用户如果使用 UTF-8 字符集的浏览器访问 GBK 的中文网站,仍旧会使乱码一团。这是一个历史原因,在将来的某个时刻,或许会被最终解决。
目录
相关文章
|
传感器 监控 安全
基于STM32的智能家居安防系统设计与实现
基于STM32的智能家居安防系统设计与实现
1285 1
EMQ
|
存储 域名解析 NoSQL
使用 EMQX Cloud 实现物联网设备一机一密验证
本文将采用 Redis 作为认证数据源存储数据库,讲解如何通过物联网设备端证书中包含的 Common Name 为验证信息,连接到 EMQX Cloud,实现客户端一机一密验证。
EMQ
823 1
使用 EMQX Cloud 实现物联网设备一机一密验证
|
监控 Java 网络性能优化
容器内存可观测性新视角:WorkingSet 与 PageCache 监控
本文介绍了 Kubernetes 中的容器工作内存(WorkingSet)概念,它用于表示容器内存的实时使用量,尤其是活跃内存。
57248 116
容器内存可观测性新视角:WorkingSet 与 PageCache 监控
|
存储 缓存 监控
【JVM调优】如何进行JVM调优?一篇文章就够了!
深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。
4080 16
【JVM调优】如何进行JVM调优?一篇文章就够了!
|
存储 安全 数据中心
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
【5月更文挑战第8天】Docker容器利用Namespace和Cgroups实现资源隔离,保证CPU、内存、网络和存储的独立,提升资源利用率和系统安全性。资源隔离有助于简化应用部署与管理,但也带来资源竞争、监控管理及安全挑战。理解并善用资源隔离机制能实现更高效、安全的容器运行。随着技术进步,Docker容器资源隔离将持续优化。
1242 2
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
|
安全 Java 开发者
Java中的Path类使用详解及最佳实践
Java中的Path类使用详解及最佳实践
【已解决】ZooKeeper配置中出现Error contacting service. It is probably not running
【已解决】ZooKeeper配置中出现Error contacting service. It is probably not running
804 1
|
芯片 数据格式 索引
|
JSON 前端开发 JavaScript
Layui动态树详解
Layui动态树详解
319 0
|
Linux C++ Windows
基于Asio库的定时器,封装实现好用的定时任务
基于Asio库的定时器,封装实现好用的定时任务