トップ «前の日記(2010-04-16(Fri)) 最新 次の日記(2010-04-18(Sun))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2010-04-17(Sat) 晴れ晴れ

文字化けを舐めるな

つぃったーの発言の二ヶ所が、また化けていた。
片方はどうやら、現在の環境では表示できない文字らしい()。
もう片方は、普通に表示できるはずの文字列だった。
あれこれ試行錯誤して、化ける場合と化けない場合とを 同じスクリプトに入れた。
どう違うのか、あまりよくわからない。

#!/usr/bin/env ruby
require "rexml/document"
require "nkf"
nkf_add="--numchar-input"
 
doc = REXML::Document.new(
'<?xml version="1.0" encoding="UTF-8"?>
<status>
  <text1>&#33296;&#12417;&#12427;&#39156;</text1>
  <text2>&#33296;&#12417;&#12425;&#12428;</text2>
</status>')
 
e = doc.elements.each("/") { |i|
  print 'This String can display normally: '
  puts NKF.nkf(nkf_add, i.elements["status/text1"].text)
  print 'This String cannot display normally: '
  puts NKF.nkf(nkf_add, i.elements["status/text2"].text)
}
$ ruby mojibake.rb
This String can display normally: 舐める飴
This String cannot display normally: 闊舌a繧峨l

nkf のせいじゃないらしい。rexmlを通さなければ化けなかったから。

#!/usr/bin/env ruby
require 'nkf'
nkf_add="--numchar-input"
 
test1='<text1>&#33296;&#12417;&#12427;&#39156;</text1>'
test2='<text2>&#33296;&#12417;&#12425;&#12428;</text2>'
 
puts NKF.nkf(nkf_add, test1)
puts NKF.nkf(nkf_add, test2)
$ ruby test.rb
<text1>舐める飴</text1>
<text2>舐められ</text2>

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。