Проблемы кодировки символов Ruby в netbeans и командах - PullRequest
1 голос
/ 06 июня 2010

Я использую NetBeans в качестве среды разработки и запускаю приложение из cmd, но у меня возникают проблемы с отображением символов ISO 8859-1, таких как корректно в обоих окнах cmd и при запуске приложения из NetBeans

Вопрос: Как лучше настроить

Прямо сейчас я делаю

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

чтобы получить ä

Мое окружение

> chcp 65001

Active code page: 65001

> ruby ​​main.rb

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

> ruby ​​-v ruby 1.9.1p378 (редакция 2010-01-10, 26273) [i386-mingw32]

1 Ответ

2 голосов
/ 06 июня 2010

Если вы хотите использовать не-ASCII символы в вашем исходном файле, вам нужно объявить кодировку исходного файла. Самая первая строка исходного файла (или вторая, если у вас есть строка shebang) должна быть строкой комментария, которая (приблизительно) соответствует регулярному выражению

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

Другими словами: строка комментария, которая начинается с некоторого материала, затем содержит строку coding, за которой следует необязательный символ, за которым следует правильное имя кодировки, за которым следует другой материал.

Итак, если вы поставите

# coding: ISO-8859-1

вверху вашего файла, с вами все будет в порядке. Обратите внимание, что регулярное выражение явно разработано для совместимости с такими редакторами, как 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 *-*

Одна вещь, которая всегда сбивает меня с толку, это то, что Ruby не не всегда автоматически перекодирует строки. Вы должны перекодировать их самостоятельно:

puts 'ä'
# => ä

puts 'ä'.encode($>.external_encoding || Encoding.default_external)
# => ä
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...