2

日付/時刻形式があります:

format = '%Y年%b%d日 %H:%M'

呼び出しますTime#strftime(format)(例Time.now.strftime(format):

> Time.now.strftime(format)
=> "2013?Jun20? 11:56"

Windows で jruby 1.7.2 (1.9.3p327) を使用しています。strftimeUnicode 対応にする方法はありますか?

アップデート

Windows コンソールは Unicode にあまり対応していません。フォーマットだけを出力すると、次のようになります。

> I18n.t :'time.formats.long'
=> "%YÕ╣┤%b%dµùÑ %H:%M"

しかし、少なくともそれは何かです。Unicode 文字を表示しようとしていますが、strftime無視するだけです:

> I18n.t(:'time.formats.long').encoding
=> #<Encoding:UTF-8>
> Time.now.strftime("").encoding
=> #<Encoding:Windows-1252>
4

1 に答える 1

1
  1. これはreadline (JRuby に同梱されている) の問題です。簡単な修正は、irb をオプションで開始することです(または~/.irbrc--noreadlineを追加します)。IRB.conf[:USE_READLINE] = false

    C:\ConEmu>jirb
    irb(main):001:0> format = '%Y年%b%d日 %H:%M'
    => "%Y?b%d?%H:%M"                # Readline cannot handle GBK input here
    irb(main):002:0> exit
    
    C:\ConEmu>jirb --noreadline
    irb(main):001:0> format = '%Y年%b%d日 %H:%M'
    => "%Y年%b%d日 %H:%M"             # without Readline, it works
    irb(main):002:0> format.encoding
    => #<Encoding:GBK>
    irb(main):003:0> Time.now.strftime(format)
    => "2013??Jun20?? 23:20"         # strftime cannot process GBK input here
    
  2. strftimeGBK でエンコードされた文字列ではうまく機能しません。そのため、パラメータを に渡す前に、パラメータを UTF-8 にエンコードしますstrftimeEncoding.default_internalところで、strftime が!に関係なく GBK エンコードされた文字列を返すのは非常に奇妙な動作です。

    C:\ConEmu>jirb --noreadline
    irb(main):001:0> format = '%Y年%b%d日 %H:%M'
    => "%Y年%b%d日 %H:%M"
    irb(main):002:0> Time.now.strftime(format.encode('utf-8'))
    => "2013年Jun20日 23:32"
    
    irb(main):003:0> Time.now.strftime(format.encode('utf-8')).encoding
    => #<Encoding:GBK>
    irb(main):004:0> Encoding.default_internal = Encoding::UTF_8
    => #<Encoding:UTF-8>
    irb(main):005:0> Time.now.strftime(format.encode('utf-8')).encoding
    => #<Encoding:GBK>
    

JRuby の下に Rails 環境がないため、I18n エンコーディングの問題を解決することはできません。

Readline は JVM バイトコード クラス ファイルとして提供されるため、ライブラリにパッチを適用する簡単な方法はありません。だからそれはstrftimeです。

JRuby を試すのはこれが初めてですが (Ruby のエンコーディングの問題に興味がありました)、二度と取り上げることはないと思います

JVM でいくつかのプログラミング言語を見つけている場合は、Scala を見ることができます。より一貫性があり、生産的で創造的であり、(JRuby と比較して最も重要なことは) ライブラリでバグが発生しにくいことです。

または、Ruby に興味がある場合は、Windows でRailsInstallerを試すか、仮想マシンの Linux でRVMをインストールしてください。JRuby に比べてトラブルが少なく、少なくともエンコーディングのトラブルは少ないと思います。

于 2013-06-20T15:56:41.183 に答える