From: TAKAHASHI Masayoshi Date: 2000-06-05T21:59:46+09:00 Subject: [ruby-list:23065] Re: UTF-8 on print method 高橋征義です。 Itou-T15@mail.dnp.co.jpさん: > 今はブラウザーとの相性があるから、固定の答えはないのでは? áに相当する文字を、実体参照ではなく、直接UTF-8で表現し たい、ということではないでしょうか。それならブラウザに依存 しません。 # UTF-8が表示できないブラウザはおいておいて。 > SJIS-->UTF-8 なら ,a ==> xC3A1 をやらないと > でも変換表は使えない X-0213 は今 実動している? # 「変換表は使えない」というのはどういう意味でしょう? いったんUTF-8に変換してしまえば、JIS X 0213はこの場合は 関係ないですよね。 というわけで、変換するモジュールを書いてみました。 require 'uconv' include Uconv =begin = Coma module カンマのついた文字を変換するためのモジュール。 == メソッド === coma_u8(string) ISO 8859-1由来のUTF-8の文字(のいくつか)を、カンマを前に置いた 書式で表現する。 注:stringはUTF-8でなければならない。 =end module Coma ## 変換表の定義 ## 値はLatin-1(ISO 8859-1)の16進で tmp_convtbl1 = { 'a'=>'e1', 'e'=>'e9', 'i'=>'ed', 'o'=>'f3', 'u'=>'fa', 'A'=>'c1', 'E'=>'c9', 'I'=>'cd', 'O'=>'d3', 'U'=>'da', 'n'=>'f1', 'N'=>'d1', '?'=>'bf', '!'=>'a1', '<'=>'ab', '>'=>'bb' } tmp_convtbl2 = { 'u'=>'fc', 'U'=>'dc' } Convtbl1 = Hash.new() Convtbl2 = Hash.new() tmp_convtbl1.each{|key, value| Convtbl1[key] = u16tou8(value.hex.chr+"\x00") } tmp_convtbl2.each{|key, value| Convtbl2[key] = u16tou8(value.hex.chr+"\x00") } def coma_u8(str) str.gsub(/,,(.)/u){ Convtbl1[$1] || ",,"+$1 }.gsub(/,(.)/u){ Convtbl1[$1] || ","+$1 } end module_function :coma_u8 end if __FILE__ == $0 ## 使用例 include Coma jstr = <書き方 aの直前にカンマをつけたものは ,a になります。
iの直前にカンマをつけたものは ,i になります。
oの直前にカンマをつけたものは ,o になります。
uの直前にカンマをつけたものは ,u になります。
eの直前にカンマをつけたものは ,e になります。

Aの直前にカンマをつけたものは ,A になります。
Iの直前にカンマをつけたものは ,I になります。
Oの直前にカンマをつけたものは ,O になります。
Uの直前にカンマをつけたものは ,U になります。
Eの直前にカンマをつけたものは ,E になります。

Uの直前にカンマを2つつけたものは ,,U になります。
uの直前にカンマを2つつけたものは ,,u になります。

Nの直前にカンマをつけたものは ,N になります。
nの直前にカンマをつけたものは ,n になります。
<の直前にカンマをつけたものは ,< になります。
>の直前にカンマをつけたものは ,> になります。
!の直前にカンマをつけたものは ,! になります。
?の直前にカンマをつけたものは ,? になります。

何もないところにカンマを並べても、,,とか,にしかなりません。

EOB str = coma_u8(euctou8(jstr)) ## 元のテキストがShift_JISの場合は、 ## str = coma_u8(sjistou8(jstr)) ## に置き替える。 print "test\n"; print str,"\n" print "\n"; end 高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp