Ruby:如何自动添加“# encoding: UTF-8”?
Posted
技术标签:
【中文标题】Ruby:如何自动添加“# encoding: UTF-8”?【英文标题】:Ruby: how to add "# encoding: UTF-8" automatically? 【发布时间】:2011-06-15 20:09:52 【问题描述】:是否有任何 gem 可以自动将# encoding: UTF-8
添加到每个 Ruby 文件中?
或者有没有其他方法可以防止整个 Ruby on Rails 项目中出现invalid multibyte char (US-ASCII)
错误(不仅仅是在单个类中)?
【问题讨论】:
这不是您要求的,但值得一些文本编辑器(例如 emacs)在您保存包含 UTF 的 ruby 文件时自动在顶部插入“#encoding: UTF-8” -8. 【参考方案1】:升级到Ruby 2.0,因为它使 UTF-8 成为默认编码,无需使用魔法 cmets。
【讨论】:
@Subimage 我相信大多数遗留代码应该可以在较新版本的 ruby 中工作,其他方式更难。【参考方案2】:试试magic_encodinggem,它可以将uft-8魔术注释插入到你应用中的所有ruby文件中。
[编辑] 切换到 SublimeText 现在我使用 auto-encoding-for-ruby 插件。
【讨论】:
请注意,这不是依赖项,它是一个为您编辑所有文件的工具。如果你愿意,你可以卸载后记 这是auto-encoding-for-ruby的Atom版本 @Mirko 您是否获得了用于 Sublime Text 3 的 auto-encoding-for-ruby 插件? @Mirko 嗯,我也在使用 ruby 2.x,但由于某种原因在 irb 控制台中运行某些脚本时遇到问题。【参考方案3】:维姆:
:args **/*.ruby
:set hidden
:argdo norm! O# encoding: UTF-8
:wqa
【讨论】:
谢谢!很好的建议。对我来说,vim 在写入过程中在:wqa
命令上崩溃(segfault),导致一些写入文件和一堆.swp。所以我最终使用:wa
,然后使用:q
,效果很好。当然,如果 .rb
是您的 ruby 扩展,请将 .ruby
更改为 .rb
。
@William Denniss:另一个:argdo 0put ='#encoding: UTF-8'
【参考方案4】:
如果您使用的是 Sublime Text 2,则可以使用在需要时自动包含编码声明的插件:https://github.com/elomarns/auto-encoding-for-ruby。
【讨论】:
【参考方案5】:只运行一个脚本怎么样?
#!/usr/bin/env ruby1.9.1
require 'find'
fixfile = []
Find.find('.') do |path|
next unless /\.rb$/.match(path);
File.open(path) do |file|
count = 0;
type = :lib
file.each do |line|
if count == 0 and /#!/.match(line)
type = :script
end
if /utf/.match(line)
break
end
if (count += 1) > 10 then
fixfile.push path:path, type:type
break
end
end
if file.eof?
fixfile.push path:path, type:type
end
end
end
fixfile.each do |info|
path = info[:path]
backuppath = path + '~'
type = info[:type]
begin
File.delete(backuppath) if File.exist?(backuppath)
File.link(path, backuppath)
rescue Errno::ENOENT => x
puts "could not make backup file '#backuppath' for '# path ': #$!"
raise
end
begin
inputfile = File.open(backuppath, 'r')
File.unlink(path)
File.open(path, 'w') do |outputfile|
if type == :script
line = inputfile.readline
outputfile.write line
end
outputfile.write "# encoding: utf-8\n"
inputfile.each do |line|
outputfile.write line
end
inputfile.close
outputfile.close
end
rescue => x
puts "error: #x #$!"
exit
end
要使其自动添加到您的 Rakefile。
如果您只想更新具有 utf-8 字符的文件,可以运行 file -bi #path
并查找 charset=utf-8。
【讨论】:
【参考方案6】:仅当您的文件真正以 UTF-8 存储时,自动向每个 Ruby 文件添加 # encoding: UTF-8
才有意义。
如果您的文件采用 CP850 编码(Windows 中的 AFAIK 默认设置)并且您使用非 ASCII 字符,请将 invalid multibyte char (US-ASCII)
替换为 invalid multibyte char (UTF-8)
。
如果每个文件真的是 UTF-8,我更喜欢手动修改和检查。
【讨论】:
以上是关于Ruby:如何自动添加“# encoding: UTF-8”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 selenium webdriver 中自动化桌面通知 - ruby
如何使用 ruby api 创建一个 bigquery 表并从云存储导入