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 --noreadline(或添加IRB.conf[:USE_READLINE] = false到您的 ~/.irbrc)。

    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. strftime使用 GBK 编码的字符串无法正常工作。因此,在将参数传递给strftime. 顺便说一句,不管 strftime 返回 GBK 编码的字符串,这是非常奇怪的行为Encoding.default_internal

    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 回答