- 论坛徽章:
- 2
|
本帖最后由 OwnWaterloo 于 2012-09-08 23:01 编辑
回复 8# chinesedragon
联系到/etc/input。。。 我大概知道你指的什么了。。。
cmd.exe是可以调出输入法的。。。 切换输入法用的键和其他地方都是一样的。。。 下面会出现一个输入法名,随着输入的拼音还会出现候选项。
问题应该是被选的候选项不会插入到当前命令行中去。。。
这个问题不在cmd.exe本身。如果只是cmd.exe,无论是通过切换输入法输入,还是点击标题栏->编辑->粘贴,都是可以向当前命令行插入的。
阻止这个事的是msys的bash。 要用~/.inputrc进行配置。 /etc/input(rc)也许也行,没试。
- set convert-meta off
- set input-meta on
复制代码 这个方法在git 1.7.10之后又不行了。。。 原因可能就是前面那个回帖提到的。。。 git 在很多地方都进行了转换。。。
如果~/.inputrc没有那两行配置,问题和之前一样,那些字节会被阻止插入。
如果有那两行配置,就是1.7.10的新的问题了。。。 它会认为插入的是utf8编码的,然后自己转换为cp936。
问题是输入法或者标题->编辑->粘贴插入的都是cp936的。。。
例如,~/.inputrc里,如果只有set convert-meta off。那么echo 然后插入一个汉字"语"(无论是通过输入法还是粘贴)就会显示被插入的东西,是"\323\357"。
是2个字符,\323以及\357,不是8个\,3,2,3,\,3,5,7。这就是"语"按cp936编码的结果,是输入法(或者粘贴命令)提交给cmd.exe的。set convert-meta off就允许这2个字符插入到当前命令行。
但执行 echo \323\357 # 注意依然是2byte而不是8个ascii字符
就会产生乱码了,因为\323\357这2个byte被当作了utf8,进行了utf8->cp936的转换。
如果再在~/.inputrc里添加set input-meta on,在命令行里输入echo "语"时那两个字节就会进行utf8->cp936的转换。
如果能找到一个输入法(google拼音也许可以写这样的扩展),直接向当前命令行处插入utf8编码的字节,这问题应该就很清楚了。
又或者如果能设计出一段特殊的文本,将它们按cp936编码,然后按utf8解码也能得到一段有意义的文字也可以说明这个问题。
解决的方法:
0. 找一个可以插入utf8字节流的输入法。。。
1. 找git 1.7.10的新的文档,看能不能通过配置将一些转换关闭。
2. 用其他的终端软件,比如emacs shell,就可以控制提交给git时用的编码。不过这类软件的缺点是不能利用git提供的bash补全脚本了。
3. 不要用commit -m, 而是用外部编辑工具。。。 默认的vim(终端版的)应该也会有同样的问题, 可能只有外部的才行。。。
4. 找一个cmd.exe的替代品,isatty会返回true的那种, 同时又能很好处理unicode的 —— 不过我始终没找到。。。
5. 终极解决办法,一劳永逸的。。。 抛弃Windows。。。 至少部分抛弃。。。 cmd.exe始终是硬伤。。。
比如以Windows为主,但挂个虚拟机,mount到Windows的硬盘,然后在虚拟机里用git。。。
比如直接用Linux作主要开发环境。。。 对没有找到替代品的软件在虚拟机里(或wine)里用Windows的。。。
|
|