SQLの窓

2018年05月15日


Ruby のエンコーディング( スクリプト・デフォルト・STDIN・STDOUT )



Ruby には重要なエンコーディング設定として以下の3つが存在します

1) スクリプトエンコーディング
2) デフォルト外部エンコーディング
3) デフォルト内部エンコーディング

但し内部エンコーディングに関しては、デフォルトは nil であって、意味は『何もしない』という考え方が一番問題無く理解できると思います。

しかし、Ruby の デフォルト外部エンコーディングは、実際の外部記憶装置にあるデータのエンコーディングとして扱われるので、指定する事によって日本語文字列の問題を解決できます。( インストール時に外部エンコーディングを UTF-8 に設定してテストしています )



そして、通常はソースコードも UTF-8 で書かれると思いますが、マジックコメントによって他のエンコーディングでの記述が可能です。

WEB アプリ用テストコード
# -*- coding: utf-8 -*-

puts "Content-Type: text/plain; charset=utf-8"
puts  "Expires: Thu, 19 Nov 1981 08:52:00 GMT"
puts "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
puts "Pragma: no-cache"
puts

# *********************
# エンコーディング の設定
# *********************
#Encoding.default_external='utf-8'
#Encoding.default_external='cp932'
#Encoding.default_internal='utf-8'
# *********************
# 外部,内部
# *********************
#STDIN.set_encoding('cp932', 'utf-8')
#STDOUT.set_encoding('cp932', 'utf-8')

# *********************
# 出力の整理
# *********************
def sep
	puts
	puts "---------------------"
end

# *********************
# ソースエンコーディング
# *********************
puts "Script Encoding"
p __ENCODING__ # スクリプトエンコーディング(1行目/マジックコメントで決定)
sep

# *********************
# エンコーディング
# *********************
puts "Default Encoding"
print "external : "
p Encoding.default_external
print "internal : "
p Encoding.default_internal
sep

# *********************
# STDIN エンコーディング
# *********************
puts "STDIN Encoding"
print "external : "
p STDIN.external_encoding
print "internal : "
p STDIN.internal_encoding
sep

# *********************
# STDOUT エンコーディング
# *********************
puts "STDOUT Encoding"
print "external : "
p STDOUT.external_encoding
print "internal : "
p STDOUT.internal_encoding
sep

# *********************
# 実際のエンコーディング
# enc => Encoding
# *********************
Encoding.list.each do |enc|
	print enc, ','
end
puts
sep

# *********************
# 別名を含む
# enc => String
# *********************
Encoding.name_list.each do |enc|
	print enc, ','
end
puts
sep

# *********************
# テキスト入力
# *********************
file = File.open('日本語.txt').each_line do |line|
	print line
end
file.close
sep





コマンドプロンプト用テストコード



この文字化けは、標準入力の文字列が SHIFT_JIS  であるのに対して、UTF-8 が設定されているので化けています。以下の設定を追加すると正しく表示されます。
STDIN.set_encoding('cp932', 'utf-8')
ただ、テキストファイル内の文字列は、WEB アプリのテストコードでは明らかに UTF-8 にもかかわらず、標準出力には正しく表示されています。これは、Windows の ロケール等で判断されて自分的に変換されていると推測します( わりと良くある事なので )。
# -*- coding: utf-8 -*-

# *********************
# エンコーディング の設定
# *********************
#Encoding.default_external='utf-8'
#Encoding.default_external='cp932'
#Encoding.default_internal='utf-8'
# *********************
# 外部,内部
# *********************
#STDIN.set_encoding('cp932', 'utf-8')
#STDOUT.set_encoding('cp932', 'utf-8')

# *********************
# 出力の整理
# *********************
def sep
	puts
	puts "---------------------"
end

# *********************
# ソースエンコーディング
# *********************
puts "Script Encoding"
p __ENCODING__ # スクリプトエンコーディング(1行目/マジックコメントで決定)
sep

# *********************
# エンコーディング
# *********************
puts "Default Encoding"
print "external : "
p Encoding.default_external
print "internal : "
p Encoding.default_internal
sep

# *********************
# STDIN エンコーディング
# *********************
puts "STDIN Encoding"
print "external : "
p STDIN.external_encoding
print "internal : "
p STDIN.internal_encoding
sep

# *********************
# STDOUT エンコーディング
# *********************
puts "STDOUT Encoding"
print "external : "
p STDOUT.external_encoding
print "internal : "
p STDOUT.internal_encoding
sep

# *********************
# テキスト入力
# *********************
file = File.open('日本語.txt').each_line do |line|
	print line
end
file.close
sep

# *********************
# 標準入出力
# *********************
while line = STDIN.gets
	line = line.chomp!
	puts "【#{line}】"
end
sep




▼ コマンドプロンプト用バッチファイル
setlocal

@path=%path%;C:\Ruby24-x64\bin

dir | ruby.exe std.rb

pause

endlocal
posted by lightbox at 2018-05-15 19:23 | Ruby 2018 | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり