[#49838] rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — junichirou tahara <taharajunichirou@...>

jxtaharaと申します.

14 messages 2014/06/23
[#49840] Re: rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — EGUCHI Osamu <eguchi@...> 2014/06/23

えぐち@エスアンドイーです。

[#49842] Re: rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — Nobuyoshi Nakada <nobu@...> 2014/06/23

(2014/06/23 9:29), EGUCHI Osamu wrote:

[ruby-list:49852] encoding of backtrace

From: OHARA Shigeki <os@...>
Date: 2014-06-25 12:35:42 UTC
List: ruby-list #49852
大原といいます。

Ruby 2.1 で EUC-JP で書かれたコードを
端末が EUC-JP でも UTF-8 でも動くようにしたいと思い、
下記のようなコードを書いてみました。

---- ここから ----
#!/usr/local/bin/ruby
# -*- mode: ruby; encoding: euc-jp -*-

console_encoding = Encoding.locale_charmap
$stdout.set_encoding(console_encoding, Encoding::CP51932)
$stderr.set_encoding(console_encoding, Encoding::CP51932)
$stdin.set_encoding(console_encoding, Encoding::CP51932)

puts "ほげ"
warn "ほげ"
raise StandardError, "ほげ"
---- ここまで ----

これを UTF-8 な端末で動かすと、

---- ここから ----
ほげ
ほげ
z.rb:11:in `<main>': **ココが文字化け** (StandardError)
---- ここまで ----

のように、 puts と warn は UTF-8 で出力されるのですが、
最後の例外の backtrace だけは EUC-JP になって文字化けしてしまいます。

これはそういうものでしょうか?
これを端末の encoding に合わせて出力する方法はあるでしょうか?

あと、 set_encoding のくだりはもっとこうした方が良いというのがあれば、
教えていただけるとありがたいです。

# もっとスッキリ書けないかというのと、
# Encoding::CP51932 と即値で書いているところを、
# ソースコードの encoding を取得したものをセットしたい。

----
OHARA Shigeki (大原 重樹) <os@iij.ad.jp>

In This Thread

Prev Next