[Ruby 1.9 - Bug #5176][Open] UTF-8以外でpsychを使用し、YAML.dumpを実行するとエラーが発生する

Issue #5176 has been reported by Masafumi Kiribayashi.


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

Author: Masafumi Kiribayashi
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [i686-linux]

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

Issue #5176 has been updated by Yui NARUSE.

Status changed from Open to Assigned
Assignee set to Aaron P.

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.
YAML Ain’t Markup Language (YAML™) Version 1.1

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

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

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

Author: Masafumi Kiribayashi
Status: Assigned
Priority: Normal
Assignee: Aaron P.
Category:
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [i686-linux]

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

Issue #5176 has been updated by Shyouhei U…

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

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

Author: Masafumi Kiribayashi
Status: Assigned
Priority: Normal
Assignee: Aaron P.
Category:
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [i686-linux]

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

Issue #5176 has been updated by Aaron P…

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: test.rb · GitHub

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

Author: Masafumi Kiribayashi
Status: Assigned
Priority: Normal
Assignee: Aaron P.
Category:
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [i686-linux]

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

Issue #5176 has been updated by Yui NARUSE.

Shyouhei U. wrote:

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

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

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

Author: Masafumi Kiribayashi
Status: Assigned
Priority: Normal
Assignee: Aaron P.
Category:
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [i686-linux]

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

Issue #5176 has been updated by Masafumi Kiribayashi.

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


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

Author: Masafumi Kiribayashi
Status: Assigned
Priority: Normal
Assignee: Aaron P.
Category:
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [i686-linux]

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

Issue #5176 has been updated by Aaron P…

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.

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

Author: Masafumi Kiribayashi
Status: Closed
Priority: Normal
Assignee: Aaron P.
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.2p290 (2011-07-09) [i686-linux]

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