【问题标题】:hash strings get improperly encoded哈希字符串编码不正确
【发布时间】:2012-02-26 11:31:26
【问题描述】:

我有一个简单的常量散列,其中定义了字符串键:

MY_CONSTANT_HASH = {
'key1' => 'value1'
}

现在,我注意到键上的encoding.nameUS-ASCII。但是,Encoding.default_internal 预先设置为 UTF-8。为什么它没有被正确编码?我以后不能force_encoding,因为那个时候对象被冻结了,所以我得到了这个错误:

can't modify frozen String

P.S.:我使用的是 ruby​​ 1.9.3p0(2011-10-30 修订版 33570)。

【问题讨论】:

    标签: ruby encoding utf-8 ruby-1.9


    【解决方案1】:

    默认的 internalexternal 编码是针对 IO 操作的:

    • CSV
    • 从磁盘读取文件数据
    • Dir 中的文件名
    • 等等...

    最简单的方法是添加# encoding=utf-8 注释告诉Ruby 源文件是UTF-8 编码的。例如,如果你运行这个:

    # encoding=utf-8
    H = { 'this' => 'that' }
    puts H.keys.first.encoding
    

    作为独立的 Ruby 脚本,您将获得 UTF-8,但如果您运行以下代码:

    H = { 'this' => 'that' }
    puts H.keys.first.encoding
    

    你可能会得到 US-ASCII。

    【讨论】:

    • 这是为内联字符串设置编码的官方方式吗?此外,在链接下,您可以阅读以下内容:“语言环境编码 (__ ENCODING __),而不是 default_internal,被用作创建字符串的编码。”
    • @m33lky:我认为“魔术评论”hack 是官方的,它也有一些其他的变体。取决于区域设置的唯一问题是它们在应用程序或源文件之外,因此如果您更改区域设置、在不同的机器上工作、忘记在服务器上设置区域设置,您可能会得到奇怪的非本地效果, ...
    猜你喜欢
    • 2012-08-23
    • 2015-03-10
    • 1970-01-01
    • 2021-12-23
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2013-01-20
    相关资源
    最近更新 更多