簡體   English   中英

Ruby:如何自動添加“#encoding:UTF-8”?

[英]Ruby: how to add “# encoding: UTF-8” automatically?

是否有任何gem自動為每個Ruby文件添加# encoding: UTF-8

或者是否有任何其他方法可以防止整個Ruby on Rails項目中的invalid multibyte char (US-ASCII)錯誤(僅在單個類中)?

升級到Ruby 2.0 ,因為它使UTF-8成為默認編碼,無需魔術注釋。

嘗試使用magic_encoding gem,它可以將uft-8魔法注釋插入應用中的所有ruby文件。

[編輯]現在切換到SublimeText我使用auto-encoding-for-ruby插件。

Vim的:

:args **/*.ruby
:set hidden
:argdo norm! O# encoding: UTF-8
:wqa

如果您使用的是Sublime Text 2,則可以使用在需要時自動包含編碼聲明的插件: https//github.com/elomarns/auto-encoding-for-ruby

如何運行腳本呢?

#!/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

當您的文件真正存儲在UTF-8中時,自動添加# encoding: UTF-8到每個Ruby文件。

如果您的文件是CP850(Windows中的AFAIK默認值)編碼而您使用的是非ASCII字符,則將invalid multibyte char (US-ASCII)替換為invalid multibyte char (UTF-8)

我更喜歡手動修改和檢查每個文件,如果它真的是UTF-8。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM