这里的表现: 我部署到Red Hat 6环境的 项目发现中文乱码,通过该项目发送的邮件也是中文乱码
期间遇到了一些问题,我讲述一下我的解决过程。
首先我先检查我的 项目是否 是 UTF-8的,将自己项目文件的默认编码设置为 UTF-8
然后打包到服务器中,
查看 服务器编码
> locale
网上一大把博客说:
centos6环境下是 修改 /etc/sysconfig/i18n文件
vim /etc/sysconfig/i18n
输入i,进入 编辑模式
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16
输入 ESC,退出编辑模式
输入 :wq 保存退出
但是你要注意你服务器安装了哪些语言包
locale -a
这里我决定用常用英文版的UTF8的环境,所以我查看了一下,有该包 en_US.utf8
确认无误后,我进行了服务器重启 ,网上说 source 该文件即可,其实是不对的,centos6环境该类文件是必须重启才生效的
输入 reboot
等待一定时间重连服务器
然而发现,输入 locale 还是以前的结果
打印 echo $LANG 环境变量为空
这个时候就要让我很迷茫了,这个时候我同事提醒我是不是我用的软件的问题,我用的是SSH(Secure Shell Client)
但在该软件我并没有找到设置编码显示的
这里我用回了最顺手的 XShell
确定软件显示的编码为UTF-8
但仍然没有效果。
直到我执行了这句话, yum install fonts-chinese,安装英文版的中文包
然后查看 locale 发现已经全部改过来了。
这个时候,你再重启你的项目发现打印的日志和发送的邮件都恢复了正常。
注意: 如果你要用 zh_US.UTF-8 ,中文版UTF-8,你应该安装的是 yum groupinstall chinese-support
注意: 你要确定你的服务器和你的项目要统一哪种编码,如果你要设置为 GBK,请统一将服务器和项目编码都设置。
最后我修改了 ~/.base_profile 文件新增 export LANG=zh_CN.UTF-8 再source才成功
在这个问题中,我其实误打误撞的解决了。但如果要明白原理和配置的过程
那么我就应该知道
locale
locale 中文意思是 语言环境。也就是说 你打算让你的系统处于哪种语言环境
将locale展开,发现有很多类型的参数,这些参数代表什么呢?
LANG=语言 LC_CTYPE=语言符号及分类 LC_NUMERIC=数字 LC_TIME=时间 LC_COLLATE="比较和习惯 LC_MONETARY=货币 LC_MESSAGES=信息表达 LC_PAPER=默认纸张尺寸大小 LC_NAME=姓名书写方式 LC_ADDRESS=地址书写方式 LC_TELEPHONE=电话号码书写方式 LC_MEASUREMENT=度量衡表达方式 LC_IDENTIFICATION=对locale自身包含信息的概述 LC_ALL=
它可以精准设置 每种方式的语言环境
LC_ALL, LC_*, LANG之间的关系
设定locale就是设定12大类的locale分类属性,即12个LC_*。
除了这12个变量可以设定以外,为了简便起见,还有两个变量:
LC_ALL和LANG它们之间有一个优先级的关系:LC_ALL;LC_*LANG;可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。
从优先级角度:LC_ALL > LC_* > LANG
Linux中source命令的用法
source命令:
source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
用法:
source filename 或 . filename
我们还需要了解 linux 的 etc文件夹,该名称来源于法语的 et cetera 翻译成中文就是 等等 的意思
etc 文件夹中放着的是系统管理和配置文件
发现并不是安装了中文包了原因,头都大了
4、 为什么 JAVA不需要管oracle的编码格式,可以直接取数据在JAVA中自适应项目编码呢?
查阅资料,发现这个就是 数据库驱动包的作用了。
驱动包:https://mvnrepository.com/artifact/com.oracle/ojdbc6
驱动类名:oracle.jdbc.driver.OracleDriver
从这里我们可以确定 jdbc驱动包可以 将数据库的数据转换二进制数据进行交互,并可以转换成双方支持的编码格式。
由于网上只有简单的jdbc驱动程序描诉,各大厂商未开发源码阅读,这里就只概述我们这种驱动程序
百度百科定义:
JDBC(java database connectivity)驱动程序是对JDBC规范完整的实现,它的存在在JAVA程序与数据库系统之间建立了一条通信的渠道。
JDBC 的基本层次结构由 Java 程序、JDBC 驱动程序管理器、驱动程序和数据库四部分组成
我们常用的在 java程序中配置一个maven,添加一个jar的方式是属于
纯Java的JDBC驱动程序
纯Java的JDBC驱动程序(Direct-to-DatabasePureJavaDriver)这类驱动程序是直接面向数据库的纯Java驱动程序,即所谓的"瘦"驱动程序。使用这类驱动程序时无需安装任何附加的软件(无论是本地计算机或是数据库服务器端),所有存取数据库的操作都直接由JDBC驱动程序来完成,此类驱动程序能将JDBC调用转换成DBMS专用的网络协议,能够自动识别网络协议下的特殊数据库并能直接创建数据连接。
第四类驱动程序可能是最佳的JDBC驱动程序类型。这是一类新型的驱动程序
优点:
缺点:
此类驱动程序的诸多优点使得它的缺点并不突出,在企业级应用软件中,是应优先考虑的。因此,一个Servlet程序,要适应不同的操作系统,最好使用此类驱动;这种驱动也非常适合Applet程序,事实证明它能安全通过TCP/IP协议连接到数据库。