精华内容
下载资源
问答
  • 一个地区locale就是根据这几大类习惯定义,这些locale定义文件放在/usr/share /i18n/locales目录下面,所有字符集都放在/usr/share/i18n/charmaps,所有字符集也都是用Unicode编号索引。 怎样去自
    对于计算机来说就是你要是用哪一种字符集,你就必须告诉你的linux系统,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share /i18n/locales目录下面,所有的字符集都放在/usr/share/i18n/charmaps,所有的字符集也都是用Unicode编号索引的。

     

    怎样去自定义locale
    在gentoo生成locale还是很容易的,首先要在USE里面加入userlocales支持,然后编辑locales.build文件,这个文件用来指示glibc生成locale文件。
    很多人不明白每一个条目是什么意思。 其实根据上面的说明现在应该很明确了。
     
    File: /etc/locales.build
    en_US/ISO-8859-1
    en_US.UTF-8/UTF-8
     
    zh_CN/GB18030
    zh_CN.GBK/GBK
    zh_CN.GB2312/GB2312
    zh_CN.UTF-8/UTF-8
     
    上面是我的locales.build文件,依次的说明是这样的:
     
    en_US/ISO-8859-1:生成名为en_US的locale,采用ISO-8859-1字符集,并且把这个locale作为英文_美国locale类的默认值,其实它和en_US.ISO-8859-1/ISO-8859-1没有任何区别。
     
    en_US.UTF-8/UTF-8:生成名为en_US.UTF-8的locale,采用UTF-8字符集。
     
    zh_CN/GB18030:生成名为zh_CN的locale,采用GB18030字符集,并且把这个locale作为中文_中国locale类的默认值,其实它和zh_CN.GB18030/GB18030没有任何区别。
     
    zh_CN.GBK/GBK:生成名为zh_CN.GBK的locale,采用GBK字符集。
    zh_CN.GB2312/GB2312:生成名为zh_CN.GB2312的locale,采用GB2312字符集。
    zh_CN.UTF-8/UTF-8:生成名为zh_CN.UTF-8的locale,采用UTF-8字符集。
     
    关于默认locale,默认locale可以简写成en_US或者zh_CN的形式,只是为了表达简单而已没有特别的意义。
     
    Gentoo在locale定义的时候掩盖了一些东西,也就是locale的生成工具:localedef。
    在编译完glibc之后你可以用这个localedef 再补充一些locale,就会更加理解locale了。具体的可以看 localedef 的manpage。
     
    $localedef -f 字符集 -i locale定义文件 生成的locale的名称
    例如
    $localedef -f UTF-8 -i zh_CN zh_CN.UTF-8
     
    上面的定义方法和在locales.build中设定zh_CN.UTF-8/UTF-8的结果是一样一样的。
    一. 步骤

    对于计算机来说就是你要是用哪一种字符集,你就必须告诉你的linux系统,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share /i18n/locales目录下面,所有的字符集都放在/usr/share/i18n/charmaps,所有的字符集也都是用Unicode编号索引的。

     

    怎样去自定义locale
    在gentoo生成locale还是很容易的,首先要在USE里面加入userlocales支持,然后编辑locales.build文件,这个文件用来指示glibc生成locale文件。
    很多人不明白每一个条目是什么意思。 其实根据上面的说明现在应该很明确了。
     
    File: /etc/locales.build
    en_US/ISO-8859-1
    en_US.UTF-8/UTF-8
     
    zh_CN/GB18030
    zh_CN.GBK/GBK
    zh_CN.GB2312/GB2312
    zh_CN.UTF-8/UTF-8
     
    上面是我的locales.build文件,依次的说明是这样的:
     
    en_US/ISO-8859-1:生成名为en_US的locale,采用ISO-8859-1字符集,并且把这个locale作为英文_美国locale类的默认值,其实它和en_US.ISO-8859-1/ISO-8859-1没有任何区别。
     
    en_US.UTF-8/UTF-8:生成名为en_US.UTF-8的locale,采用UTF-8字符集。
     
    zh_CN/GB18030:生成名为zh_CN的locale,采用GB18030字符集,并且把这个locale作为中文_中国locale类的默认值,其实它和zh_CN.GB18030/GB18030没有任何区别。
     
    zh_CN.GBK/GBK:生成名为zh_CN.GBK的locale,采用GBK字符集。
    zh_CN.GB2312/GB2312:生成名为zh_CN.GB2312的locale,采用GB2312字符集。
    zh_CN.UTF-8/UTF-8:生成名为zh_CN.UTF-8的locale,采用UTF-8字符集。
     
    关于默认locale,默认locale可以简写成en_US或者zh_CN的形式,只是为了表达简单而已没有特别的意义。
     
    Gentoo在locale定义的时候掩盖了一些东西,也就是locale的生成工具:localedef。
    在编译完glibc之后你可以用这个localedef 再补充一些locale,就会更加理解locale了。具体的可以看 localedef 的manpage。
     
    $localedef -f 字符集 -i locale定义文件 生成的locale的名称
    例如
    $localedef -f UTF-8 -i zh_CN zh_CN.UTF-8
     
    上面的定义方法和在locales.build中设定zh_CN.UTF-8/UTF-8的结果是一样一样的。
    一. 步骤


       1. 确保 emerge glibc 时, useflags 中有 userlocales
          要让 glibc 在 emerge 时仅生成我们所需的 locales, 那么必须设置 userlocales useflag:
          代码:

           # echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
          

          emerge -pv glibc 时应看到:
          引用:

          [ebuild R ] sys-libs/glibc-2.3.4.20041102 -build -debug -erandom -hardened -multilib +nls -nomalloccheck +nptl +nptlonly -pic +userlocales 0 kB

          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB18030
           zh_CN.GB2312/GB2312
           zh_CN.UTF-8/UTF-8
          

          代码:

           # emerge --oneshot glibc
          

          代码:

           LC_ALL=zh_CN
          

          然后运行:
          代码:

           # env-update
          

          代码:

           $ touch ??.txt
           $ ls -l
           -rwxrwx---  1 root users       0 12月 21 11:04 ??.txt
          


          代码:

           $ echo $LC_ALL
           zh_CN
           $ btdownloadgui.py
           段错误
           $ LC_ALL=zh_CN.gb2312 btdownloadgui.py
           (正常运作)

          代码:
          
          $ echo $LC_ALL
           zh_CN
           $ gxmame
           (大量错误输出:
           (gxmame.original:7583): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
           且界面所有中文变成空白)
           $ LC_ALL=zh_CN.utf8 gxmame
           (正常运作)

          代码:

           # 必不可少的英文支持
           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           # LC_ALL=zh_CN, 则系统将使用 zh_CN 下的所有字符信息/内容, 因此我们使用 GB18030 码表 (charmap) 以最大限度覆盖所有中文字符
           zh_CN/GB18030
           # 为有些仅支持 gb2312 的程序提供选择
           zh_CN.GB2312/GB2312
           # 为有些仅支持 utf8 的程序提供选择
           zh_CN.UTF-8/UTF-8
          

          对于 /etc/locales.build 的格式 (每一行<locale>/<charmap>) 有时会让人迷惑, 比如会看到 de_DE@euro/ISO-8859-15 这样的, 又会看到 en_US.UTF-8/UTF-8... 我当时就一直不理解为什么会有个 "@" 符号? 什么时候该用 "."? 其实很简单,

              * 在 /usr/share/i18n/locale 目录中, 就有一个 de_DE@euro 的文件, 所以这个 locale 就等于 de_DE@euro, "@" 符号与格式无关!

              * 至于 ".", 这个不好解释, 可以理解为有生成 "子 locale" 的意思, 唯一要保证的是, "." 后的内容必须是 /usr/share/i18n/charmaps 中存在的 charmap. 例如 /usr/share/i18n/charmap 中有 GB18030.gz, GB2312.gz, GBK.gz, 那么我们就可以 zh_CN.GB18030/GB18030, zh_CN.GB2312/GB2312, zh_CN.GBK/GBK



          经过实验发现, 每个 locale 项会在 /usr/lib/locale 下生成一个同名的目录, 例如, 如上配置, 我们将在 /usr/lib/locale 下得到如下目录:
          代码:

           eric@gentux ~ $  ls /usr/lib/locale/
           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.gb2312  zh_CN.utf8
          


          (注, ru_RU 里面的内容为空, 我删掉过, 但是 emerge glibc 时又会生成, 忽略之)
          [/blue]
          每个目录恰好与 /etc/locales.build 中的 locales 一一对应.


          而又为 /usr/lib/locale/zh_CN 下的 LC_* 文件的内容都是使用 /usr/share/i18n/charmaps 里的 GB18030.gz 这一目前最全 (?) 的中文码表来生成的, 因此, 这又让所有程序覆盖了最全 (?) 的中文字符, 系统将可以正常处理 GB18030 字符集范围以内的所有中文字符 (当然, 还是有限制, 有些生僻的中文字符还是显示成方块, 那是因为字体文件本身的限制造成的, 如果我没记错的话, simsun 仅支持到 GBK 字符集, 不过已经绝对够用了. 如果还非要显示所有字符, 那就设法找个支持 GB18030 字符集的字体吧, 好像有个 simsun-18030).
          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB2312
           zh_CN/GBK
           zh_CN/GB18030
           zh_CN.UTF8/UTF-8
          


          注意, 上面有两个错误:

              * 不能同时写 zh_CN/GB2312, zh_CN/GBK, zh_CN/GB18030, 这会让 glibc 往 /usr/lib/locale/zh_CN 目录里逐个生成 GB2312, GBK, GB18030 的 LC_* 文件, 结果是: 最终只剩 GB18030 - GBK 覆盖了 GB2312, 接着 GB18030 覆盖了 GBK.

              * 应该是 zh_CN.UTF-8 而非 zh_CN.UTF8, emerge 完才发现-_-#


          代码:
          
           zh_CN


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.utf8
          


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.utf8
          


          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB2312
           zh_CN.GBK/GBK
           zh_CN.GB18030/GB18030
           zh_CN.UTF-8/UTF-8
          

          代码:

           zh_CN
          


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.gb18030
           zh_CN.gbk
           zh_CN.utf8
          


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.gb18030  zh_CN.gbk  zh_CN.utf8
          


          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB18030
           zh_CN.UTF-8/UTF-8
          


          代码:

           zh_CN
          


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.utf8
          


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.utf8
          


          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB18030
           zh_CN.GB2312/GB2312
           zh_CN.UTF-8/UTF-8
          


          代码:

           zh_CN
          


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.gb2312
           zh_CN.utf8
          


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.gb2312  zh_CN.utf8
          


       2. 编辑 /etc/locales.build, 仅设置如下 5 行, 其余一律注释掉:
       3. 安装 glibc
       4. 设置系统的 LC_ALL 为 zh_CN
          编辑 /etc/env.d/99local, 如果没有这个文件就自己创建, 添
          加一行:
       5. 注销, 重新登录, GB18030 字符集里的中文字都应该能正常
          显示, 测试:

              * 创建一个文件名包含这两个字 (?, ?) 的空文件, 应能正常显示:
              * 在网页中的 flash 里右键, flash 的菜单选项中的中文应正常显示

       6. 让仅支持 gb2312/utf8 的程序正常工作

              * 仅支持 gb2312 的 bittornado
              * 仅支持 utf8 的 gxmame


    二. 解释


       1. 只有在 useflags 中设置了 userlocales 后, /etc/locales.build 这个文件才会起作用, 否则, emerge glibc 默认将生成所有locales

       2. /etc/locales.build 的解释:
       3. 为何要设置 LC_ALL=zh_CN?
          其实最新的一些程序大都支持 locales 如 zh_CN.GBK, zh_CN.GB18030, zh_CN.UTF-8, 但是, 有些程序还是仅支持到 GB2312, 它们在 GBK, GB18030, UTF-8 下会运作不正常. 例如, 浏览器的 flash 插件的仅在 LC_ALL=zh_CN 的情况下, 其右键菜单才能正常显示中文, 在 LC_ALL=zh_CN.GBK 下, 右键菜单空白. [color=blue]总之, 通过 LC_ALL=zh_CN 设置系统的 locale 为 zh_CN 将最大限度让新老程序的中文都运作正常.


    三. 实验记录

    实验前, glibc 是安装系统是装的, 当时没有设置 userlocales 这一 useflags, 因此 glibc 安装过程中生成了所有的 locales.


       1. 第一次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题:

                bittornado 默认 LC_ALL 下段错误, export LC_ALL=zh_CN.GB2312 后再运行, 则提示 GB2312 不是系统支持的 locale (因为之前的那个互相覆盖... locale -a 中可以看出系统中只有 GB18030 和 UTF-8 ), 自动 fallback 回 C locale, 含中文信息的 torrent 显示乱码.


       2. 第二次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题:

                    o 在 LC_ALL=zh_CN 的情况下, 含这两个字 (?, ?) 的文件名显示为 /224{... 这样的乱码. 这是因为 /usr/lib/locale/zh_CN 下的 LC_* 文件内容仅以 GB2312 码表生成, 因此无法覆盖超过 GB2312 字符集的字符.

                    o 在设置 LC_ALL=zh_CN.GBK 之后, 上述二字显示正常, 说明 GBK 字符集覆盖了这些字. 但是这时在浏览器中, flash 右键, 菜单为空白, 所有中文在 GBK 下都无法正常显示.

                    o 在设置 LC_ALL=zh_CN.UTF8 之后, 上述二字显示正常, 说明 GB18030 字符集覆盖了这些字. 但是这时在浏览器中, flash 右键, 菜单成为英文.



       3. 第三次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题:

                由于 zh_CN 下的 LC_* 是用 GB18030 生成的, 在把系统 LC_ALL 设置为 zh_CN 之后, 同时获得了最大限度覆盖所有中文字符以及让新老程序尽可能支持中文的好处 (如 flash 右键菜单显示正常). 可是这时 bittornado 会出现如第一次时的情况, 段错误, 以及自动 fallback 回 C locale 以致中文乱码的问题. 主要因为系统中没有 zh_CN.GB2312 的 locale 可以给它使用.



       4. 第四次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题: 迄今暂无![/code]



              * 小结: 在第三次实验的基础上, 为 /etc/locales.build 中添加了一行 zh_CN.GB2312/GB2312 之后, 系统的 locale 获得迄今最精简最完美的结果:

                    o [color=blue]系统支持目前最全的中文字符集 GB18030
                    o 由于 LC_ALL=zh_CN, 因此新老程序对中文的支持同样完美

                    o 仅支持 gb2312 (bittornado) 或 utf8 (gxmame) 的程序都有符合它们需要的 locale 以供选择
       1. 确保 emerge glibc 时, useflags 中有 userlocales
          要让 glibc 在 emerge 时仅生成我们所需的 locales, 那么必须设置 userlocales useflag:
          代码:

           # echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
           

          emerge -pv glibc 时应看到:
          引用:

          [ebuild R ] sys-libs/glibc-2.3.4.20041102 -build -debug -erandom -hardened -multilib +nls -nomalloccheck +nptl +nptlonly -pic +userlocales 0 kB

          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB18030
           zh_CN.GB2312/GB2312
           zh_CN.UTF-8/UTF-8
           

          代码:

           # emerge --oneshot glibc
           

          代码:

           LC_ALL=zh_CN
           

          然后运行:
          代码:

           # env-update
           

          代码:

           $ touch ??.txt
           $ ls -l
           -rwxrwx---  1 root users       0 12月 21 11:04 ??.txt
           


          代码:

           $ echo $LC_ALL
           zh_CN
           $ btdownloadgui.py
           段错误
           $ LC_ALL=zh_CN.gb2312 btdownloadgui.py
           (正常运作)

          代码:
           
          $ echo $LC_ALL
           zh_CN
           $ gxmame
           (大量错误输出:
           (gxmame.original:7583): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
           且界面所有中文变成空白)
           $ LC_ALL=zh_CN.utf8 gxmame
           (正常运作)

          代码:

           # 必不可少的英文支持
           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           # LC_ALL=zh_CN, 则系统将使用 zh_CN 下的所有字符信息/内容, 因此我们使用 GB18030 码表 (charmap) 以最大限度覆盖所有中文字符
           zh_CN/GB18030
           # 为有些仅支持 gb2312 的程序提供选择
           zh_CN.GB2312/GB2312
           # 为有些仅支持 utf8 的程序提供选择
           zh_CN.UTF-8/UTF-8
           

          对于 /etc/locales.build 的格式 (每一行<locale>/<charmap>) 有时会让人迷惑, 比如会看到 de_DE@euro/ISO-8859-15 这样的, 又会看到 en_US.UTF-8/UTF-8... 我当时就一直不理解为什么会有个 "@" 符号? 什么时候该用 "."? 其实很简单,

              * 在 /usr/share/i18n/locale 目录中, 就有一个 de_DE@euro 的文件, 所以这个 locale 就等于 de_DE@euro, "@" 符号与格式无关!

              * 至于 ".", 这个不好解释, 可以理解为有生成 "子 locale" 的意思, 唯一要保证的是, "." 后的内容必须是 /usr/share/i18n/charmaps 中存在的 charmap. 例如 /usr/share/i18n/charmap 中有 GB18030.gz, GB2312.gz, GBK.gz, 那么我们就可以 zh_CN.GB18030/GB18030, zh_CN.GB2312/GB2312, zh_CN.GBK/GBK



          经过实验发现, 每个 locale 项会在 /usr/lib/locale 下生成一个同名的目录, 例如, 如上配置, 我们将在 /usr/lib/locale 下得到如下目录:
          代码:

           eric@gentux ~ $  ls /usr/lib/locale/
           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.gb2312  zh_CN.utf8
           


          (注, ru_RU 里面的内容为空, 我删掉过, 但是 emerge glibc 时又会生成, 忽略之)
          [/blue]
          每个目录恰好与 /etc/locales.build 中的 locales 一一对应.


          而又为 /usr/lib/locale/zh_CN 下的 LC_* 文件的内容都是使用 /usr/share/i18n/charmaps 里的 GB18030.gz 这一目前最全 (?) 的中文码表来生成的, 因此, 这又让所有程序覆盖了最全 (?) 的中文字符, 系统将可以正常处理 GB18030 字符集范围以内的所有中文字符 (当然, 还是有限制, 有些生僻的中文字符还是显示成方块, 那是因为字体文件本身的限制造成的, 如果我没记错的话, simsun 仅支持到 GBK 字符集, 不过已经绝对够用了. 如果还非要显示所有字符, 那就设法找个支持 GB18030 字符集的字体吧, 好像有个 simsun-18030).
          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB2312
           zh_CN/GBK
           zh_CN/GB18030
           zh_CN.UTF8/UTF-8
           


          注意, 上面有两个错误:

              * 不能同时写 zh_CN/GB2312, zh_CN/GBK, zh_CN/GB18030, 这会让 glibc 往 /usr/lib/locale/zh_CN 目录里逐个生成 GB2312, GBK, GB18030 的 LC_* 文件, 结果是: 最终只剩 GB18030 - GBK 覆盖了 GB2312, 接着 GB18030 覆盖了 GBK.

              * 应该是 zh_CN.UTF-8 而非 zh_CN.UTF8, emerge 完才发现-_-#


          代码:
           
           zh_CN


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.utf8
           


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.utf8
           


          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB2312
           zh_CN.GBK/GBK
           zh_CN.GB18030/GB18030
           zh_CN.UTF-8/UTF-8
           

          代码:

           zh_CN
           


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.gb18030
           zh_CN.gbk
           zh_CN.utf8
           


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.gb18030  zh_CN.gbk  zh_CN.utf8
           


          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB18030
           zh_CN.UTF-8/UTF-8
           


          代码:

           zh_CN
           


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.utf8
           


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.utf8
           


          代码:

           en_US/ISO-8859-1
           en_US.UTF-8/UTF-8
           zh_CN/GB18030
           zh_CN.GB2312/GB2312
           zh_CN.UTF-8/UTF-8
           


          代码:

           zh_CN
           


          代码:

           C
           en_US
           en_US.utf8
           POSIX
           zh_CN
           zh_CN.gb2312
           zh_CN.utf8
           


          代码:

           en_US  en_US.utf8  ru_RU  zh_CN  zh_CN.gb2312  zh_CN.utf8
           


       2. 编辑 /etc/locales.build, 仅设置如下 5 行, 其余一律注释掉:
       3. 安装 glibc
       4. 设置系统的 LC_ALL 为 zh_CN
          编辑 /etc/env.d/99local, 如果没有这个文件就自己创建, 添
          加一行:
       5. 注销, 重新登录, GB18030 字符集里的中文字都应该能正常
          显示, 测试:

              * 创建一个文件名包含这两个字 (?, ?) 的空文件, 应能正常显示:
              * 在网页中的 flash 里右键, flash 的菜单选项中的中文应正常显示

       6. 让仅支持 gb2312/utf8 的程序正常工作

              * 仅支持 gb2312 的 bittornado
              * 仅支持 utf8 的 gxmame


    二. 解释


       1. 只有在 useflags 中设置了 userlocales 后, /etc/locales.build 这个文件才会起作用, 否则, emerge glibc 默认将生成所有locales

       2. /etc/locales.build 的解释:
       3. 为何要设置 LC_ALL=zh_CN?
          其实最新的一些程序大都支持 locales 如 zh_CN.GBK, zh_CN.GB18030, zh_CN.UTF-8, 但是, 有些程序还是仅支持到 GB2312, 它们在 GBK, GB18030, UTF-8 下会运作不正常. 例如, 浏览器的 flash 插件的仅在 LC_ALL=zh_CN 的情况下, 其右键菜单才能正常显示中文, 在 LC_ALL=zh_CN.GBK 下, 右键菜单空白. [color=blue]总之, 通过 LC_ALL=zh_CN 设置系统的 locale 为 zh_CN 将最大限度让新老程序的中文都运作正常.


    三. 实验记录

    实验前, glibc 是安装系统是装的, 当时没有设置 userlocales 这一 useflags, 因此 glibc 安装过程中生成了所有的 locales.


       1. 第一次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题:

                bittornado 默认 LC_ALL 下段错误, export LC_ALL=zh_CN.GB2312 后再运行, 则提示 GB2312 不是系统支持的 locale (因为之前的那个互相覆盖... locale -a 中可以看出系统中只有 GB18030 和 UTF-8 ), 自动 fallback 回 C locale, 含中文信息的 torrent 显示乱码.


       2. 第二次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题:

                    o 在 LC_ALL=zh_CN 的情况下, 含这两个字 (?, ?) 的文件名显示为 /224{... 这样的乱码. 这是因为 /usr/lib/locale/zh_CN 下的 LC_* 文件内容仅以 GB2312 码表生成, 因此无法覆盖超过 GB2312 字符集的字符.

                    o 在设置 LC_ALL=zh_CN.GBK 之后, 上述二字显示正常, 说明 GBK 字符集覆盖了这些字. 但是这时在浏览器中, flash 右键, 菜单为空白, 所有中文在 GBK 下都无法正常显示.

                    o 在设置 LC_ALL=zh_CN.UTF8 之后, 上述二字显示正常, 说明 GB18030 字符集覆盖了这些字. 但是这时在浏览器中, flash 右键, 菜单成为英文.



       3. 第三次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题:

                由于 zh_CN 下的 LC_* 是用 GB18030 生成的, 在把系统 LC_ALL 设置为 zh_CN 之后, 同时获得了最大限度覆盖所有中文字符以及让新老程序尽可能支持中文的好处 (如 flash 右键菜单显示正常). 可是这时 bittornado 会出现如第一次时的情况, 段错误, 以及自动 fallback 回 C locale 以致中文乱码的问题. 主要因为系统中没有 zh_CN.GB2312 的 locale 可以给它使用.



       4. 第四次:

              * /etc/locales.build
              * echo $LC_ALL
              * locale -a
              * ls /usr/lib/locale
              * 问题: 迄今暂无![/code]



              * 小结: 在第三次实验的基础上, 为 /etc/locales.build 中添加了一行 zh_CN.GB2312/GB2312 之后, 系统的 locale 获得迄今最精简最完美的结果:

                    o [color=blue]系统支持目前最全的中文字符集 GB18030
                    o 由于 LC_ALL=zh_CN, 因此新老程序对中文的支持同样完美

                    o 仅支持 gb2312 (bittornado) 或 utf8 (gxmame) 的程序都有符合它们需要的 locale 以供选择
    展开全文
  • Java 编码 UTF-8

    2017-05-25 21:11:00
    所以想将文件的格式统一一下(由于UTF-8的通用性,决定往UTF-8统一),遇见的第一个问题是:怎样查看现有文件的编码方式。 文件编码问题集锦  字符串编码(charset,encoding。decoding)问题原理  Java编码浅析...

    近期在处理文件时发现了相同类型的文件使用的编码可能是不同的。所以想将文件的格式统一一下(由于UTF-8的通用性,决定往UTF-8统一),遇见的第一个问题是:怎样查看现有文件的编码方式。

    文件编码问题集锦 
    字符串编码(charset,encoding。decoding)问题原理 
    Java编码浅析 
    判定文件编码或文本流编码的方法
    上面的几篇文章能够看成认识编码问题的“从入门到精通” 

    假设你看完了上面的文章。一定了解到了,在java中,class文件採用utf8的编码方式,JVM执行时採用utf16。Java的字符串是永远都是unicode的,採用的是UTF-16的编码方式。 

    想測试一下,java对UTF-8文件的读写的能力。结果发现了一个非常郁闷的问题,假设通过java写的UTF-8文件,使用Java能够正确的读,可是假设用记事本将同样的内容使用UTF-8格式保存。则在使用程序读取是会从文件里多读出一个不可见字符。


    此处有具体描写叙述问题的解决办法,以及解决方式:

    http://www.cnblogs.com/luoyanli/archive/2013/04/12/3016139.html

    展开全文
  • 环境为windows10下的mysql8.0 进入数据库后,创建数据库,创建数据表一切正常; 然而到插入数据时无论怎样都是显示: Unknown column ‘插入的数据名...然后查看自己的编码格式 格式不对,遂找到my.ini配置文件修改(...

    环境为windows10下的mysql8.0

    进入数据库后,创建数据库,创建数据表一切正常;
    然而到插入数据时无论怎样都是显示: Unknown column ‘插入的数据名’ in ‘field list’
    首先多次尝试发现语句并没有错误;
    然后在大佬的帮助下发现创建数据库和数据表时候没有指定编码格式,指定格式后就可以插入的。

    然后查看自己的编码格式在这里插入图片描述
    格式不对,遂找到my.ini配置文件修改(我的目录是在:C:\ProgramData\MySQL\MySQL Server 8.0下,这是个隐藏目录)

    然后问题又来了:
    我的方式是先停止服务:net stop MySQL80
    然后修改配置文件如下:
    添加语句:
    [client]
    default-character-set=utf8mb4

    [mysql]
    default-character-set=utf8mb4

    [mysqld]
    character-set-client-handshake=FALSE
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    init_connect=‘SET NAMES utf8mb4’

    此处修改参考自:
    原文链接:https://blog.csdn.net/itmr_liu/article/details/80851266

    然而我修改配置文件并保存后
    在启动mysql服务:net start MySQL80
    出现无论如何都无法启动的问题
    网上各种搜也没辙

    然后我把原配置文件(我备份了)替换回来,发现又能够启动了。。。
    后来我又试了下,哪怕是只是在配置文件里用#加个注释都没法启动服务。。。

    那我一起岂不是创建数据库数据表都要指定编码格式啦

    此文记录自己的坑,日后来填。

    已填坑:
    采用notepad++打开记事本,编码格式改为ANSI格式(因为my.ini文件默认是这个格式),然后做如上修改再保存。启动服务成功。
    然后查看全局编码:SHOW VARIABLES LIKE ‘character_set_%’;
    在这里插入图片描述
    修改成功,ojbk!!

    这里又出现另外一个坑:插入语句还是出现:Unknown column ‘插入的数据名’ in 'field list’这个问题!!


    各种找问题才发现毛病:我不管插入数字还是字母还是中文,插入的值都用的键盘esc键下面的那个引号引起来的,所以报错,我直接用普通的引号发现就没问题了!! 经过测试发现:插入数字可用引号也可以不用引号(但是要用普通引号哦);插入varchar类型的值必须用普通引号引起来才行的;至少我电脑上是这样。。。


    在这里插入图片描述
    而且这个问题的出现也不是编码问题,一开始方向就错了,我现在把编码恢复为默认编码,使用起来也没问题!!!

    至此完美解决 !!!

    展开全文
  • 在我们爬虫道路上,无疑会碰到网页gbk编码格式,显示效果是怎样的呢 经过源码的查看,我发现次网站是以gbk方式编码,查过资料后,得出结论要经过gbk编码结果就没问题了,但编码格式有点特殊,有必要提一下。 ...

    在我们爬虫的道路上,无疑会碰到网页的gbk编码格式,显示效果是怎样的呢

    前程无忧的首页preview

    经过源码的查看,我发现次网站是以gbk方式编码,查过资料后,得出结论要经过gbk编码结果就没问题了,但编码格式有点特殊,有必要提一下。

    通过requests.get得到的源码经过response.encoding=‘gbk’已经编码为简体字

    转gbk后

    之前由于习惯没用过response.encoding转码,后经过写入文件发现原来的方法写入不成。经过不断尝试,发现如下方法,二次编码写入文件,缺一不可。

    ret = requests.get(url='https://search.51job.com/list/010000,000000,0000,00,9,99,Python%25E7%2588%25AC%25E8%2599%25AB,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=', headers=headers)
    ret.encoding = 'gbk'
    with open('bs.html', 'w', encoding='gbk') as f:
        f.write(ret.text)
    

    当我们用scrapy框架请求页面时,发现请求到的源码是utf-8格式的,得出结论:scrapy请求页面时,会根据源码的<meta 标识自动编码,提供便利,减少了工作量。

    参考:

    http://sinhub.cn/2018/08/solve-problem-of-charset-detection-in-scrapy/
    https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php

    展开全文
  • 11.1.8 决定文件的属性 11.1.9 目录的处理 11.2 从客户端上载文件 11.2.1 处理上载文件 11.2.2 确定文件有效 11.3 完善工作申请表 11.4 非关系型数据库 11.4.1 程序说明 11.4.2 地址簿的用户界面 11.4.3 设计...
  • 熟悉后再一个函数一个函数地深入学习exosip提供接口函数,就可以深入理解osip 了,达到间接学习oSIP目的,同时也能从eXoSIP中学习到正确使用oSIP良好编程风格和语法格式。 而要成功编译...
  • 感觉字符、编码的地方都够写一遍文章了。 此部分就是检查 url 合法性,并对不合法进行转义。提取出 domain name 之后,就该是 DNS 解析相关了,不过还要提一下,浏览器还会检查 HSTS ...
  • TS高清封装提取工具tsMuxeR_1.10.6绿色汉化版

    千次下载 热门讨论 2011-01-24 10:18:41
    同目录下还有相关.meta文件查看这个文件可知道分离后相关格式信息 MUXOPT--no-pcr-on-video-pid--new-audio-pes--demux--vbr--vbv-len=500 #V_MPEG4/ISO/AVC,"G:\wjd\BDMV\STREAM\00001.m2ts",insertSEI,...
  • TS高清容器封装提取工具tsMuxeR_1.10.6绿色汉化版

    千次下载 热门讨论 2010-06-29 05:21:39
    同目录下还有相关.meta文件查看这个文件可知道分离后相关格式信息 MUXOPT--no-pcr-on-video-pid--new-audio-pes--demux--vbr--vbv-len=500 #V_MPEG4/ISO/AVC,"G:\wjd\BDMV\STREAM\00001.m2ts",insertSEI,...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0141 使用FileGetDate函数返回文件的修改日期 90 0142 使用FileWrite函数将缓冲区中的内容写入文件 91 4.10 其他函数 91 0143 使用Random函数产生7个随机数 91 0144 使用DiskFree函数返回磁盘驱动器的剩余...
  • 0141 使用FileGetDate函数返回文件的修改日期 90 0142 使用FileWrite函数将缓冲区中的内容写入文件 91 4.10 其他函数 91 0143 使用Random函数产生7个随机数 91 0144 使用DiskFree函数返回磁盘驱动器的剩余...
  • 0141 使用FileGetDate函数返回文件的修改日期 90 0142 使用FileWrite函数将缓冲区中的内容写入文件 91 4.10 其他函数 91 0143 使用Random函数产生7个随机数 91 0144 使用DiskFree函数返回磁盘驱动器的剩余...
  • 0141 使用FileGetDate函数返回文件的修改日期 90 0142 使用FileWrite函数将缓冲区中的内容写入文件 91 4.10 其他函数 91 0143 使用Random函数产生7个随机数 91 0144 使用DiskFree函数返回磁盘驱动器的剩余...
  • 0141 使用FileGetDate函数返回文件的修改日期 90 0142 使用FileWrite函数将缓冲区中的内容写入文件 91 4.10 其他函数 91 0143 使用Random函数产生7个随机数 91 0144 使用DiskFree函数返回磁盘驱动器的剩余...
  • 0141 使用FileGetDate函数返回文件的修改日期 90 0142 使用FileWrite函数将缓冲区中的内容写入文件 91 4.10 其他函数 91 0143 使用Random函数产生7个随机数 91 0144 使用DiskFree函数返回磁盘驱动器的剩余...
  • 脚下留心:war文件的内部目录结构 2.4.4 部署描述符与目录的默认网页 73 动手体验:设置目录的默认网页 2.5 配置虚拟主机 75 2.5.1 浏览器访问WEB资源的过程 75 动手体验:用telnet程序分析浏览器访问WEB资源的...
  • 通常那儿都有常见问题(FAQ)、邮件列表及相关说明文件的链接。如果你的努力(包括阅读 FAQ)都没有结果,网站上也许还有报告 Bug(Bug-reporting)的流程或链接,如果是这样,链过去看看。 向陌生的人或论坛发送...
  • asp.net知识库

    2015-06-18 08:45:45
    Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的...
  • C# winform典型系统开发模板

    热门讨论 2011-09-17 15:13:21
     8.2.1 Base64编码格式 180  8.2.2 SMTP服务 181  8.2.3 POP3协议 184  8.2.4 使用Jmail组件接收邮件 186  8.2.5 邮件发送类使用 188  8.2.6 使用正则表达式验证邮件格式 190  8.3 设计...
  • 8.2.1 Base64编码格式 8.2.2 SMTP服务 8.2.3 POP3协议 8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 数据库设计 8.3.2 系统登录 8.3.3 邮件发送实现 ...
  • C#开发典型模块大全

    2014-03-12 18:11:22
    8.2.1 Base64编码格式 180 8.2.2 SMTP服务 181 8.2.3 POP3协议 184 8.2.4 使用Jmail组件接收邮件 186 8.2.5 邮件发送类使用 188 8.2.6 使用正则表达式验证邮件格式 190 8.3 设计过程 191 8.3.1 ...
  • HTML开发王

    2013-01-03 11:33:09
    1.3.3 查看网页源文件 1.4 html 4.0特点 1.4.1 国际化 1.4.2 可访问性 1.4.3 表格 1.4.4 混合文档 1.4.5 样式表 . 1.4.6 脚本 1.4.7 打印 1.5 巩固与自测 第2章 html文档基本结构 2.1 使用dreamweaver创建第一...
  • 首先在“商品信息”中为每个商品加入商品编号,其次录入单据时在“商品编号”栏直接输入编码后按回车键即可调出所对应商品名称。 $24.在查应收应付帐时,同时出现应收金额和应付金额怎样处理? #24.出现该现象是...
  • 8.2.1 Base64编码格式 8.2.2 SMTP服务 8.2.3 POP3协议 8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 数据库设计 8.3.2 系统登录 8.3.3 邮件发送实现 ...
  • 8.2.1 Base64编码格式 8.2.2 SMTP服务 8.2.3 POP3协议 8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 数据库设计 8.3.2 系统登录 8.3.3 邮件发送实现 ...
  • [HTML开发王].张亚飞.扫描版

    热门讨论 2011-09-13 12:45:04
    1.3.3 查看网页源文件 1.4 html 4.0特点 1.4.1 国际化 1.4.2 可访问性 1.4.3 表格 1.4.4 混合文档 1.4.5 样式表 . 1.4.6 脚本 1.4.7 打印 1.5 巩固与自测 第2章 html文档基本结构 2.1 使用dreamweaver创建第一...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

怎样查看文件的编码格式