Project

General

Profile

Actions

Bug #5176

closed

UTF-8以外でpsychを使用し、YAML.dumpを実行するとエラーが発生する

Added by hannibal (Masafumi Kiribayashi) over 12 years ago. Updated over 12 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.2p290 (2011-07-09) [i686-linux]
Backport:
[ruby-dev:44363]

Description

Windows環境(mingw)、Linux環境において、添付したファイルで現象が発生します。
libyamlが「YAMLで使用する文字列はUTF-8である」ことを主張するのが原因かと思います。
Stringをdumpする前にUTF-8に変換する作業をライブラリですべきではないでしょうか。
現状、私は添付したファイルのコメントアウトした箇所を有効にすることで、問題を回避しています。


Files

test.rb (598 Bytes) test.rb hannibal (Masafumi Kiribayashi), 08/09/2011 05:17 PM

Updated by naruse (Yui NARUSE) over 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to tenderlovemaking (Aaron Patterson)

libyamlが「YAMLで使用する文字列はUTF-8である」ことを主張するのが原因かと思います。
これは以下の通り規格が UTF-8 と UTF-16 しかないと言っているので libyaml は正しいと思います。

A YAML processor must support the UTF-16 and UTF-8 character encodings.
If a character stream does not begin with a byte order mark (#FEFF), the character encoding shall be UTF-8.
http://yaml.org/spec/1.1/#id868742

Stringをdumpする前にUTF-8に変換する作業をライブラリですべきではないでしょうか。

うーん、一度変換するともう戻らないのでどうなんでしょうかね。
Encoding.default_internal が指定されているときは変換したほうが良いとは思います。

Updated by shyouhei (Shyouhei Urabe) over 12 years ago

戻んないような変換が発生しそうな時はEncoding::InvalidByteSequenceErrorでいいんじゃないかなあ

Updated by naruse (Yui NARUSE) over 12 years ago

Shyouhei Urabe wrote:

戻んないような変換が発生しそうな時はEncoding::InvalidByteSequenceErrorでいいんじゃないかなあ

InvalidByteSequence はある String の内容であるバイト列がそのエンコーディングとして正しくない時の例外なので、
不可逆変換の時は意味的にちょっと違いますね。
何か一つ指定したらできるくらいのノリがいいかなぁと思っているんですが、SQLite とかでも黙って変換しちゃうので、
YAML 使うという時点でそういうもんだってことでもいいかなとも。

Updated by tenderlovemaking (Aaron Patterson) over 12 years ago

If you use the psych gem, I think it will fix this. Psych should automatically encode to UTF-8, but I think I added that after 1.9.2 was released.

Can you try with the Psych gem please?

Here is a test case I am using: https://gist.github.com/1144463

Updated by hannibal (Masafumi Kiribayashi) over 12 years ago

Thanks Aaron!
I tried Psych gem on Linux and Windows, your test was passed.
And my sample code ran with no errors.

Updated by tenderlovemaking (Aaron Patterson) over 12 years ago

  • Status changed from Assigned to Closed
  • Target version changed from 1.9.2 to 1.9.3
  • % Done changed from 0 to 100

Thank you for testing! The fix is in trunk, and should be in 1.9.3 as well. I will close this now.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0