代码之家  ›  专栏  ›  技术社区  ›  salgo60

NetBeans和命令w_ndow中的Ruby字符编码问题

  •  1
  • salgo60  · 技术社区  · 15 年前

    我使用NetBeans作为开发IDE,并从Cmd运行应用程序,但在Cmd窗口和从NetBeans运行应用程序时,在显示ISO 8859-1字符(如___¶正确)时出现问题。

    问题: 设置它的最佳实践是什么

    现在我这样做

    @output.puts indent + "V" + 132.chr + "lkommen till Ruby Camping!"
    

    得到 γ

    我的环境

    >CHCP 65001

    Active code page: 65001
    

    >红宝石公司

    Source encoding: <Encoding:US-ASCII>
    Default external: #<Encoding:UTF-8>
    Default internal: nil
    Locale charmap: "CP65001"
    

    我在密码里的位置

    def self.printEncoding
        puts "Source encoding: #{__ENCODING__.inspect}" if defined? __ENCODING__
        if defined? Environment::Encoding
          puts "Default external: #{Encoding.default_external.inspect}"
          puts "Default internal: #{Encoding.default_internal.inspect}"
          puts "Locale charmap: #{ Encoding.locale_charmap.inspect}"
        end
        puts "LANG environment variable: #{ENV['LANG'].inspect}" unless ENV['LANG'].nil?
      end
    

    >红宝石V Ruby 1.9.1P378(2010-01-10修订版26273)【i386-mingw32】

    1 回复  |  直到 15 年前
        1
  •  2
  •   Jörg W Mittag    15 年前

    如果要在源文件中使用非ASCII字符,则需要声明源文件的编码。源文件的第一行(如果有shebang行,则第二行)需要是一个注释行,该注释行(大致)与regexp匹配

    #.*?coding[:=]?\s+(.*)(?:\s+.*)?
    

    换句话说:一个注释行,它以一些东西开始,然后包含字符串 coding 后面跟一个可选符号,后面跟一个有效的编码名,后面跟一些其他东西。

    所以,如果你把

    # coding: ISO-8859-1
    

    在你的文件顶部,你应该没事。请注意,regexp被显式设计为与vim等编辑器兼容:

    # vim: fileencoding=UTF-8 ft=ruby syn=ruby ts=2 sw=2 ai eol et si
    

    或Emacs:

    # *-* mode: ruby; coding: utf-8; tab-width: 2; indent-tabs-mode: nil *-*
    

    有一件事总是让我很困惑,那就是红宝石 总是自动转换字符串。你必须自己超越它们:

    puts 'ä'
    # => ä
    
    puts 'ä'.encode($>.external_encoding || Encoding.default_external)
    # => ä
    
    推荐文章