红联Linux门户
Linux帮助

cygwin中中文输入与输出的解决

发布时间:2008-05-28 20:58:13来源:红联作者:libuse
想了很多种方法要运行我的一个目录下的文件,可是怎么都不行,所有的路最后都锁在了如何在cygwin下输入我的中文目录名?试了很多网上的方法终是不能成行,后来在达人的指点下,终于迷途归返,真可谓道路是曲折的,前途是光明的。

其实在cygwin下不能输入中文的原因是中文字符的最高位都是1,所以被当作控制符处理了。ok,我们现看下怎么做,然后再看看为什么这么做。

怎么做:如果你的用户目录(/home/XXX)下有了: .inputrc , .bashrc/.bash-profile这两个或三个文件,那么恭喜你,你不用建立了,只要做修改就可以了。如果没有,那么麻烦你要建立这三个文件。在Linux下,我们有多种建立文件的方法,可是如果你没有在cygwin下装有vi等编辑器,那么您可以按如下提供的方式建立这三个文件:

(1)从/ect/skel中将这三个文件拷贝到你的用户主目录下。

(2)使用notepad来建立这三个文件,但是很重要的一点是,请您在保存时一定要存成ANSI编码的.txt文件,这一点请一定要记住。

ok,文件现在是建立了,那么就剩下如何修改文件了:(请按ANSI编码格式编写)

(1)请在.inputrc文件中添加:

set meta-flag on

set convert-meta off

set output-meta on

set input-meta on

set completion-ignore-case on 

(2)请在.bashrc 或.bash-profile文件中添加:

alias ls='ls --show-control-chars --color=auto'

export LESSCHARSET=latin1

修改后请保存成ANSI编码的格式。

ok,大功告成了。

现在就看看为什么要这么做,cygwin下不能输入中文的原因是中文字符的最高位都是1,所以被当作控制符处理了,meta-flag,convert-meta等选项的意思可以参考man bash。简单的说,设置meta-flag on允许从终端输入中文,否则的话终端会过滤掉每个字节的最高位;convert-meta off是设置不将中文字符转化为转义序列,因为中文是两个字节表示的,第一字节的最高位是1开头的,可以能同于某个转义字符;output-meta on就是允许向终端直接输出中文;input-meta on就是允许向终端直接输入中文;set completion-ignore-case on这个可以在 echo A的时候按了后就能由readline给你补出来abc.txt;-show-control-chars也一样。
文章评论

共有 0 条评论