修改系统的编码方式

转载 2016年08月30日 10:13:33

   项目里有这样的要求,用户通过浏览器配制一部分信息,这部分信息不存在数据库而存在LINUX下磁盘文件中。对我来说倒是没有什么区别,不就是数据嘛,怎么存不用我管,我只要能塞进去取出来就可以了。然而在运行的时候出现了两个问题

 

    1.中文信息出现了乱码

    2.file too many open

 

    一、分析:

           1.出现乱码就只能是编码的问题了,有可能有两种情况,一种是编码不一致,另一种是不支持设置的编码,因为我在项目里面都是用UTF8的编码,所以不存在设置了不支持的编码的问题,因此推断出是系统编码引起的。linux 下输入export |grep LANG 结果是en 果然如此。

 

           2.上网查找资料得到结果是文件打开数太多超过了系统的默认值1024,但是我怎么可能同时打开1024个文件呢,这就和JVM有关了,我们都知道,JAVA的资源是靠GC来回收的,这样一来我们JAVA程序员不用处理大量有关资源回收的问题了,内存泄露的机会也少了很多,但是却不能强制GC回收,JVM给了建议回收的方法,但是处理不处理可不是我们说了算的,事情都有两面性,我们得到GC便利的同事也受到了其限制。网上说把文件打开数量增大就可以了。可能是内存里面有1千个你GC不回收但是如果你有5千个呢,你还不回收?呵呵,改过8K之后是没有出现问题了,当然网上还有同志说改1W多的。我的逻辑是用多少我就给多少再多点,呵呵。linux 下用 ulimit  -n 就可以看到你设置的数目了。

 

 

    二、初步解决方式:

          1.Runtime 系统命令 ulimit -n 8196

          2.Runtime 系统命令 export LANG="en_US.UTF-8"

          本来以为解决了,但是问题依然存在为什么呢?程序里面设置完之后马上又查询了一遍,竟然没有设置上?奇怪?没出现问题呀,问了下公司搞linux开发的同事原来这些是进程相关的,我也没有启动新的进程呀,哦,一定是Runtime.getRuntime().exec() 它启动了一个新的进程。查资料如下:

 

         在单独的进程中执行指定命令和变量。(jdk api 1.6.0 中文版exec()方法说明)

 

         看样子在程序中解决问题是不现实了,那么只能修改配置文件了。修改那个文件了,google下看看,哇,修改好多文件都可以呀,为什么修改这多种类文件的方法都有呢?既然他们都写出来了说明都曾经解决过相应的问题。那么到底哪个才能适合我目前的问题呢?没有思路继续找资料,知道看到一篇关于linux 读取配置文件的顺序的文章才明白。

 

        下面是的部分拷贝:

 

         执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout 

关于各个文件的作用域,在网上找到了以下说明: 

       (1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。 

       (2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。 

        (3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。 

        (4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。 

        (5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc /profile中的变量,他们是"父子"关系。 

         (6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

 

         感谢博主整理,上面内容来源地址是:http://zcdxzsz.iteye.com/blog/280774

 

        三、最终解决方案:

 

             根据执行的顺序我们从后面往前面查找,发现有设置lang 和ulimit 的地方改过来就可以了,如果没有就在配文件中添加一个,我是在 ~/.bash_profile   中更改的

             ulimit -n 8196

             export LANG="en_US.UTF-8"

 

             有人说在 /etc/sysconfig/i18n 里面更改编码方式,当然这样也可以,只是需要注意一点的是,不要被后面读取的配置文件的同样的属性把我们自己的设置的变量给覆盖了就好了。这也是为什么网上有那么多解决方法的原因了。


相关文章推荐

查看windows操作系统的默认编码

如何查看操作系统字符集? 在Windows平台下,进入DOS窗口,输入:chcp 可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息。 例如: 我的...

Selenium with Python中文翻译(一)

目录 installation 安装 Getting Started 开始 Navigating 浏览网页 Locating Elements 定位元素 Waits 等待 Page Objects 网...

python网络数据采集

1,采集时,及时的处理采集过程中的异常.

系统HIS开发ORACLE乱码解决方案(HIS库编码方式为US7ASCII)

package com.index.util; import java.io.IOException; import java.sql.Connection; import java.sql.D...

linux系统编码方式设置

修改/etc/sysconfig/language文件,将RC_LANG, RC_LC_ALL设置为zh_CN.GB2312, 同时将ROOT_USES_LANG设置为 "yes"   一。...

MySQL查看与修改编码方式(mysql、数据库、表)

mysql默认的编码方式是latin1,通过以下命令查看 show variables like 'char%'; 或者 mysql> show variables like "character...

ubuntu 修改txt文件编码方式(iconv)

查看文件编码方式 file **.txt 修改文件编码方式 2.1编码的问题 GB2312是国家制定的汉字编码标准,使用双子节进行编码,共收入6763个汉字和682个非汉字图形字符。GBK即对...

Windows环境下的MySQL编码方式修改

在Winodws环境下,通过zip文件进行mysql安装的方式后,默认的编码方式是latin1的。 修改为utf-8的方式是,在mysql文件夹下找到配置文件:my.ini.如果你的数据库的版本是5...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:修改系统的编码方式
举报原因:
原因补充:

(最多只允许输入30个字)