mieki256's diary



2016/10/23() [n年前の日記]

#2 [ruby] Ruby でUTF-16LEのテキストファイルにアクセス

せっかくテストしたのでメモ。動作確認環境は、Windows10 x64 + Ruby 2.2.5 p319。

テストに使った UTF-16LE のテキストは以下。

_text_utf16le_bom.txt

読み込み。 :

まずは読み込んでみる。

_open_utf16le.rb
# UTF-16LE + BOM のテキストファイルにアクセス

infile = "text_utf16le_bom.txt"

File.open(infile, 'rb:BOM|UTF-16LE') {|f|
  while l = f.gets
    l.chomp!
    puts l.encoding # => UTF-16LE
  end
}
  • File.open() に 'rb:BOM|UTF-16LE' を指定すれば UTF-16LE + BOM として開ける。
  • さらに、gets で読み込めば、 string が UTF-16LE として扱われる。
  • フツーは、ファイルを開いたら close で閉じないといけないが、File.open() にブロック({ } とか do end とか)をつけた場合は close を省略できる。

結果。
> open_utf16le.rb
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
「文字列(String)のタイプは UTF-16LEだよ」と表示された。

正規表現。 :

UTF-16LE + BOM の文字列に対して正規表現を使う例。

_open_utf16le_regexp.rb
# UTF-16LE + BOM の文字列に対して正規表現を使う

infile = "text_utf16le_bom.txt"

re0 = Regexp.new( '^\/\/'.to_s.encode("UTF-16LE") )
re1 = Regexp.new( '^(.+)\t(.+)$'.to_s.encode("UTF-16LE") )

f = File.open(infile, 'rb:BOM|UTF-16LE')
while l = f.gets
  if l =~ re0
    puts "comment"
  elsif l =~ re1
    puts "data"
  end
end
f.close
ソースコードの文字コード(この場合はUTF-8)、とは異なっている文字コードの文字列(UTF-16LE)に対して正規表現を使いたい場合、Regexp.new() を使う。いつもの調子で l =~ /^(.+)/ とか書いてしまうと UTF-16LE と UTF-8 が混在してるので「おいコラ、違う文字コードが混ざってるぞ」と怒られる

結果。
> open_utf16le_regexp.rb
comment
comment
data
data
comment
comment
data
data
UTF-16LEの文字列に対して正規表現を使って判別処理ができてる。

書き込み。 :

UTF-16LE + BOM でテキストファイルを出力してみる。

_output_utf16le.rb
# UTF-16LE + BOM の文字列をテキストファイルとして出力

outfile = "_tmp.txt"

File.open(outfile, 'wb:UTF-16LE') { |f|
  f.write "\uFEFF"  # BOMを出力
  DATA.each do |l|
    f.puts l.encode("UTF-16LE")
  end
}

__END__
ABCDEFG
0123456
日本語を記述
  • f = open(outfile, 'wb:UTF-16LE') で、UTF-16LE で出力できる。
  • f.write "\uFEFF" で、BOMを出力。
  • DATA.each {|l| puts l } を使えば、__END__ 以降に書かれた文字列を1行ずつ読み込める。

参考ページ。 :


以上です。

過去ログ表示

Prev - 2016/10 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project