- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ruby

はじめに Edit

文字コードの変換には標準添付ライブラリでも Kconv、NKF、Iconv、Uconv とあるわけですが、どれ使ったらいいの?という話。

とりあえずはkconv、半角→全角の罠をさけたいならnkfでよいかと。

kconvでお手軽に変換 Edit

kconvでstring.toほげ を使うのが簡単です。
欠点はたまに、文字コードの自動判別に失敗することです。
また、kconvは半角カナが自動全角カナになります。もう1つは、MIMEっぽい文字列がデコードされてしまいます
場合によってはかなりおせっかいな挙動かもしれません。
下手するとハマります。

それを回避するには、直接nkfをつかいます。それは次の項目へ。

まずは、kconvの例

1
2
3
4
5
6
7
8
9
10
11
12
13
#!ruby -Ku
require 'kconv'

s = "表が怖い噂のソフトキタ━(゚∀゚)━ !!"
s_euc = s.toeuc
s_sjis = s.tosjis
s_utf8 = s.toutf8
s_utf16 = s.toutf16

puts s_euc
puts s_sjis
puts s_utf8
puts s_utf16

結果をファイルに出力して、テキストエディタでエンコードを切り替えてみてみるとわかります。

nkfを用いたできるだけそのままで変換する方法 Edit

kconvは半角→全角、MIMEのデコードなど余計なことをしてくれますので、それはしないで変換する方法。
(というかkconv自体nkfのラッパーなんだけど)

この方法は実は、kconv.rbに書いてあります。
コマンドラインから、

ri String.tosjis 

などとしてこの方法(というかソースのコメント)を読むことができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!ruby -Ku
require 'kconv'

s = "表が怖い噂のソフト キタ━(゚∀゚)━ !!"
# ref: ri String.toeuc
s_euc = NKF.nkf('-exm0', s)
# ref: ri String.tosjis
s_sjis = NKF.nkf('-sxm0', s)
# ref: ri String.toutf8
s_utf8 = NKF.nkf('-wxm0', s)
# ref: ri String.toutf16
s_utf16 = NKF.nkf('-w16xm0', s)

p s_euc
puts s_euc
p s_sjis
puts s_sjis
p s_utf8
puts s_utf8
p s_utf16
puts s_utf16

kconvの厳密な変換 Edit

これもkconvで。string.kconvを使います。
自動判別することができない場合はこれです。
ただし、引数は最初が出力する文字コードで、2番目が入力する文字コード。
ただし、これも半角が全角になるなどの罠があるので注意。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!ruby -Ku
require 'kconv'

s = "表が怖い噂のソフトキタ━(゚∀゚)━ !!"
s_euc = s.kconv(Kconv::EUC, Kconv::UTF8)
s_sjis = s.kconv(Kconv::SJIS, Kconv::UTF8)
s_utf8 = s.kconv(Kconv::UTF8, Kconv::UTF8)
s_utf16 = s.kconv(Kconv::UTF16, Kconv::UTF8)

puts s_euc
puts s_sjis
puts s_utf8
puts s_utf16

参考リンク Edit


No comment. Comments/Ruby/てっとり早く文字コードを変換したい?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-04-09 Thu 14:28:44 JST (3148d)