哈希字符串编码不正确

发布于 2025-01-01 21:41:34 字数 407 浏览 0 评论 0原文

我有一个定义了字符串键的简单常量哈希:

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

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

can't edit freeze String

PS:我使用的是 ruby​​ 1.9 .3p0(2011-10-30 修订版 33570)。

I have a simple constant hash with string keys defined:

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

Now, I've noticed that encoding.name on the key is US-ASCII. However, Encoding.default_internal is set to UTF-8 beforehand. Why is it not being properly encoded? I can't force_encoding later, because the object is frozen at that point, so I get this error:

can't modify frozen String

P.S.: I'm using ruby 1.9.3p0 (2011-10-30 revision 33570).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤君无依 2025-01-08 21:41:34

默认的 内部external 编码针对 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。

The default internal and external encodings are aimed at IO operations:

  • CSV
  • File data read from disk
  • File names from Dir
  • etc...

The easiest thing for you to do is to add a # encoding=utf-8 comment to tell Ruby that the source file is UTF-8 encoded. For example, if you run this:

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

as a stand-alone Ruby script you'll get UTF-8, but if you run this:

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

you'll probably get US-ASCII.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文