抱歉英语不好。这是Ruby代码。在
s = "мистика"
`touch #{s}`
`cat #{s}`
`cat < #{s}`
有人能告诉我为什么代码失败了吗?与
sh: cannot open ми�тика: No such file
但是这个代码很好用
^{pr2}$问题是只有当单词中的俄语符号“с”与symobol'<;'
woto@woto-work:/tmp$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
woto@woto-work:/tmp$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
woto@woto-work:/tmp$ uname -a
Linux woto-work 2.6.32-26-generic #48-Ubuntu SMP Wed Nov 24 10:14:11
UTC 2010 x86_64 GNU/Linux
woto@woto-work:/tmp$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04.1 LTS
Release: 10.04
Codename: lucid
另一个例子
也许这对理解我的问题也有帮助
woto@woto-work:~/rails/avtorif$ touch мистика
woto@woto-work:~/rails/avtorif$ ruby -e "`cat < мистика`"
woto@woto-work:~/rails/avtorif$ ruby -e '`cat < мистика`'
sh: cannot open ми�тика: No such file
这是};python的{}使用{}。Ruby可能也使用
dash
中的一个错误,Debian默认使用的shell(symlink/bin/sh
导致{sh
)。dash
无法正确解析8位文本,包括UTF-8。要解决您的问题,请将其替换为bash
:然后选择“否”。这样,系统将使用
bash
作为/bin/sh
shell,它可以处理UTF-8。在下面的方法对我有用,你试过吗?在
在bash中,您引用了一个在美元符号前面加上的变量。在
在每个示例中,您都在执行一个shell命令。作为第一步,我将确保当您直接输入shell命令时,它将按您预期的方式执行:
如果shell中出现错误,则有两种可能:shell命令不理解字符编码,或者文件名需要用引号来区分。在
Ruby1.9理解字符集编码,而Ruby1.8却不理解。您需要做一些研究来确定shell环境使用的字符编码。完成后,将创建常规字符串形式的命令:
^{pr2}$然后执行命令:
我相信ruby1.9的默认编码是UTF-8。Ruby1.8没有编码的概念,字符串只是一个字节数组。不幸的是,并不是每一个软件都能理解unicode或字符编码的概念(很像ruby1.8)。在这些情况下,系统将使用任何默认编码。我怀疑你的shell环境可能就是其中之一。在
相关问题 更多 >
编程相关推荐