专栏首页最高权限比特流浅谈乱码原因及解决方案

浅谈乱码原因及解决方案

前言

其实作为程序猿来讲,中国的程序猿遇到的问题可能会比国外的程序猿遇到的问题多很多。 一个原因是因为各种标准的制定、各种IDE的编写,都是由老外来完成的,制定出来的东西可能和中国人的习惯不太一样;还有一个原因就是因为国际编码的问题,通常,外国人写的东西无需对编码进行转换,默认的就是ISO-8859-1;到了中国,就涉及到本土化的问题,中文编码应当是GBK,这是本地化的编码。 而各种标准、各种浏览器一般用的都是ISO-8859-1,所有就造成了两种编码之间的转换。所以后来出现了UTF8,来解决各种编码问题。UTF8基本上包含了地球上所有的可见字符,十分强大。 但不幸的是,各种标准并没有按照这一编码来制定,而依然沿用以前的做法。 所以,解决各种乱码问题,就成了中国程序猿的必不可少的技能之一。 这篇文章,就是要和大家讨论种种乱码问题出现的原因,以及相应的解决办法,我目前已知的情况共有三种,下面就位大家一一讲解。

IDE环境造成的乱码

其实这个是非常让人郁闷的问题,有时候还真的很难发现。现在流行的两种JavaIDE,idea和eclipse。idea的所有默认编码都是UTF8格式,基本上统一所有编码,如果你再idea出现了乱码问题,一般不是idea自身的问题。 如果你看到idea的控制台出现了中文乱码,这很有可能是你选用的字体不支持部分中文造成的,idea不背这个锅。 对于eclipse,这货可能是为了让中国人写代码的时候更加方便,当你点击目录中的src,然后点击file->Properties->Resources,你会看到,TextFile Encoding默认是GBK。是不是很绝望,为了下次不再因为这个问题产生乱码,记得创建文件夹以后就配置一下src的encodeing,还是刚刚的那个路径,改成UTF-8就行了。 也许你会说,我根本就没发现这里有什么问题啊,我一直是这种设置也没有发生过乱码。我只能说,那是因为你没有遇到过。 最常见的一个场景就是web应用中(不使用框架),当你提交的表单中存在file域的时候,你可能会使用一些文件上传组件,这些组件处理信息的时候,会将表单中的数据变成UTF8或者你设置的格式,但是,如果你的文件编码是GBK的话,就肯定就会碰到乱码的问题了。具体原因有待深究,但个人觉得这可能是因为编译后的class字节码文件处理信息过程的问题。

POST和GET方法传递参数造成的乱码

如果你发现更改了文件编码并且重新build以后,还是出现乱码的问题,如果依然是web应用的话,那就很有可能是POST和GET方法传参造成的乱码。 这个问题可以看我的文章,POST和GET方法乱码问题解决方案,写的其实非常详细了。

数据库编码格式导致的

如果你发现,你从数据库中读取出的数据是乱码的,那么原因也很简单,是因为数据库的字符集配置问题。 首先,进入mysql的控制台,也就是命令行中。输入如下语句,查看mysql的字符集配置。 - 方法一:show variables like 'collation_%'; - 方法二:show variables like 'character_set_%';

如果你看到,字符集列表中有显示各种字符集的配置都是拉丁文,也就是lantin这样子的。那么毫无疑问是因为字符集的配置问题了。对于不同的系统,配置的方法都是相同的,那就是找到mysql文件的配置信息路径,一般linux可以按照我的这篇文章来进行配置,windows也可以参考,只需要找到配置文件,做最后的字符配置操作即可。windows的mysql配置文件一般在mysql的安装目录下,如果没有,那么可以自己建一个名为my.cnf的文件(如果无效,试试新建mysqld.cnf文件),然后在文件中输入如下配置信息:

[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8

文章链接:mysql乱码解决方案

结语

好了,这次的文章就到这里了,如果你喜欢我的文章,请关注我,可以点个赞,支持一下我。想和我交个朋友的,可以邮件联系我roobtyan@outlook.com。感谢您的阅读,再见!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript学习总结(三)

    在学习完了基本的内容之后,我们来学习一下JavaScript中的对象部分以及如何自定义对象的问题。

    roobtyan
  • Mysql:ERROR 1698 (28000): Access denied for user 'root'@'localhost'

    roobtyan
  • ubuntu 插网线无法上网解决方案

    不知道最近是什么情况,ubuntu链接网线总是上不去网,但是wifi还能用,一直也就没有捣鼓,不过今天连wifi都不能用了,只能开始修理了。

    roobtyan
  • MySQL 编码和解码

    背景:目前正在进行业务重构,需要对使用MySQL的业务库表进行重新设计,在迁移时,遇到了中文字符乱码问题(源库表的默认编码是LATIN1,新库表的默认编码为UT...

    skylerxu
  • 转义、编码和加密

    转义、编码和加密是开发中很常见也很基础的概念。对于初学开发的开发者,可能有时会无法准确的区分着几个词。我们将通过这篇文章来了解一下“转义、编码和加密”这几个词的...

    newbe36524
  • DFS中的奇偶剪枝学习笔记

    奇偶剪枝学习笔记 描述 现假设起点为(sx,sy),终点为(ex,ey),给定t步恰好走到终点, s | ...

    Angel_Kitty
  • 13.1 设置更改root密码

    设置更改root密码目录概要 /usr/local/mysql/bin/mysql -uroot 更改环境变量PATH,增加mysql绝对路径 mysqladm...

    运维小白
  • 大型网站架构体系的演变(下)

    在做扩展满足了基本的性能需求后,我们会逐渐关注“可用性”(也就是我们通常听别人吹牛时说的SLA、几个9)。如何保证真正“高可用”,也是个难题。

    哲洛不闹
  • 清空 COS Bucket 内文件 (Java)

    COS 的web控制台和登录工具里面没有提供清空bucket的功能,批量删除每次删除上限1000条,且删除的操作相对麻烦。

    用户1685622
  • 【微服务】157:全文检索技术Elasticsearch

    官方语言就是:Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎。

    刘小爱

扫码关注云+社区

领取腾讯云代金券