Как конвертировать символы с акцентом на Ruby в HTML - PullRequest
7 голосов
/ 30 октября 2009

Как я могу сделать это на Ruby?

puts some_method("ò")
# => "ò"

Другими словами, преобразуйте акцентированный символ, такой как ò, в его HTML-версию: ò

Я пытался так:

# coding: utf-8
require 'rubygems'
require 'htmlentities'
require 'unicode'

coder = HTMLEntities.new
string = "Scròfina"
puts coder.encode(string, :named)

но что я получаю (от: http://htmlentities.rubyforge.org/):

/Library/Ruby/Gems/1.8/gems/htmlentities-4.2.0/lib/htmlentities/encoder.rb:85:in `unpack': malformed UTF-8 character (expected 2 bytes, given 1 bytes) (ArgumentError)
 from /Library/Ruby/Gems/1.8/gems/htmlentities-4.2.0/lib/htmlentities/encoder.rb:85:in `encode_decimal'
 from (eval):2:in `encode_extended'
 from /Library/Ruby/Gems/1.8/gems/htmlentities-4.2.0/lib/htmlentities/encoder.rb:18:in `encode'
 from /Library/Ruby/Gems/1.8/gems/htmlentities-4.2.0/lib/htmlentities/encoder.rb:18:in `gsub!'
 from /Library/Ruby/Gems/1.8/gems/htmlentities-4.2.0/lib/htmlentities/encoder.rb:18:in `encode'
 from /Library/Ruby/Gems/1.8/gems/htmlentities-4.2.0/lib/htmlentities.rb:74:in `encode'
 from unicode_pleasure.rb:8

Спасибо, что уделили время!

  • Леонардо

1 Ответ

12 голосов
/ 30 октября 2009

Я явно установил $ KCODE, чтобы ваш пример работал. Кроме того, убедитесь, что ваш исходный файл фактически закодирован как UTF-8 !

# coding: utf-8
require 'rubygems'
require 'htmlentities'
require 'unicode'
$KCODE = 'UTF-8'
coder = HTMLEntities.new
string = "Scròfina"
puts coder.encode(string, :named)
...