Emacs Multiterm 中跑脚本出现 Invalid Byte Sequence in US-ASCII 问题

➜  XX_OneYearChallenge git:(master) ✗ ruby publish.rb 
publish.rb:47:in `gsub': invalid byte sequence in US-ASCII (ArgumentError)
        from publish.rb:47:in `process_org'
        from publish.rb:221:in `block in <main>'
        from publish.rb:220:in `each'
        from publish.rb:220:in `<main>'
➜  XX_OneYearChallenge git:(master) ✗ 

但是同样的脚本在 Terminal 或者 iTerm 中运行时没有任何问题的。

脚步代码可以在下面找到,

https://github.com/li-xinyang/XX_OneYearChallenge/blob/master/publish.rb

建议用ansi-term,这个问题最少。不过我现在喜欢专门的工具做专门的事,我很少在emacs里面使用terminal了

网上搜索 “invalid byte sequence in US-ASCII” 有很多结果,好象是说编码的问题,要改 shell 下的 locale。

改过,并没有用诶

一样的结果

试试这个?

以前试过,一样的结果

执行 locale 看看

或者 ruby -Exxx publish.rb,xxx 为 org 文件的编码

1 个赞
locale

的返回结果

LANG="en_SG.UTF-8"
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

这个和 org 文件编码有什么关系吗?

Ruby 的默认IO外部编码受 locale 的设置的影响,抛“Invalid Byte Sequence” 是正常的,至于在 Terminal.app 和 iTerm2.app 中不会抛错我就不知道了。既然有处理中文数据的需要,建议把操作系统改成中文的吧

如果想了解 Ruby 的字符编码的设置和处理,可以看看这个帖子:

1 个赞

那我好,换 python 写也可以。谢谢啦

对了 在单位电脑上 ubuntu 15 一样的代码 一样的英文系统也没问题 就给你说一下。。。我看了下encoding一眼看上去好复杂呀