Contents
  1. 1. Sublime Text 自动加载GBK编码支持
    1. 1.1. 问题
    2. 1.2. 解决
  2. 2. 系统编码为UTF-8时的GBK文件搜索
    1. 2.1. 方法一
    2. 2.2. 方法二
    3. 2.3. 方法三
  3. 3. qgit 显示GBK编码文件差异时乱码

本文介绍Linux上工作中针对GBK编码文件处理的相关工具使用技巧。

Sublime Text 自动加载GBK编码支持

问题

当使用ConvertToUTF8插件实现GBK编码支持时,每次打开一个GBK编码的文件前,Sublime Text都会提示一个编码选择框,例如:
Sublime Text 编码选择框
当需要打开的GBK编码文件很多时,每次都要选择编码就会影响效率及打断思维,因此最好能够直接识别成GBK编码而不需要选择。

解决

打开~/.config/sublime-text-3/Packages/ConvertToUTF8/ConvertToUTF8.py文件,注释掉def check_encoding(view, encoding, confidence):中的:

1
2
3
4
5
6
7
8
9
10
else:
if not_detected:
# using encoding detected by ST
encoding = view_encoding
else:
show_selection(view, [
['{0} ({1:.0%})'.format(encoding, confidence), encoding],
['{0}'.format(view_encoding), view_encoding]
])
return

即改成如下形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def check_encoding(view, encoding, confidence):
view_encoding = view.encoding()
result = 'Detected {0} vs {1} with {2:.0%} confidence'.format(encoding, view_encoding, confidence) if encoding else 'Encoding can not be detected'
view.set_status('origin_encoding', result)
print(result)
not_detected = not encoding or confidence < 0.95 or encoding == view_encoding
# ST can't detect the encoding
if view_encoding in ('Undefined', view.settings().get('fallback_encoding')):
if not_detected:
show_selection(view)
return
#else:
#if not_detected:
# using encoding detected by ST
#encoding = view_encoding
#else:
#show_selection(view, [
#['{0} ({1:.0%})'.format(encoding, confidence), encoding],
#['{0}'.format(view_encoding), view_encoding]
#])
#return
init_encoding_vars(view, encoding)

这样每次打开GBK编码就会自动识别,而不用手动选择编码了。

系统编码为UTF-8时的GBK文件搜索

当操作系统的locale为UTF-8时,此时不能用grep, ack等直接搜索GBK编码的文件。

方法一

在模拟终端(Konsole, GNOME Terminal)下执行export LC_CTYPE="zh_CN.GBK",并把终端的编码设置为’GBK’,例如下图在Konsole中设置编码:
选择Konsole编码

方法二

以 LC_ALL=zh_CN.GBK konsole 方式 打开模拟终端。

方法三

基于 qt5 版的 konsole 不支持方法二的方式,需改成如下方式:

  1. 新建profile,并把配置中的默认编码改成 gbk
  2. 运行命令:LC_CTYPE="zh_CN.GBK" konsole --profile gbk
    1
    2
    3
    4
    #!/usr/bin/bash
    #LC_ALL=zh_CN.GB18030 konsole -e "/usr/bin/bash"
    LC_CTYPE="zh_CN.GBK" konsole --profile gbk -e "/usr/bin/bash"
    #LC_CTYPE="zh_CN.GBK" konsole --profile gbk

qgit 显示GBK编码文件差异时乱码

在命令行下切换到项目的根目录执行:

1
2
3
4
5
cat > .git/config << EOF
[i18n]
commitencoding = GB18030
logoutputencoding = GB18030
EOF

Contents
  1. 1. Sublime Text 自动加载GBK编码支持
    1. 1.1. 问题
    2. 1.2. 解决
  2. 2. 系统编码为UTF-8时的GBK文件搜索
    1. 2.1. 方法一
    2. 2.2. 方法二
    3. 2.3. 方法三
  3. 3. qgit 显示GBK编码文件差异时乱码