Project

General

Profile

Feature #15931

encoding for CESU-8

Added by arton (Akio Tajima) 29 days ago. Updated 1 day ago.

Status:
Open
Priority:
Normal
Target version:
[ruby-dev:50801]

Description

RubyとJavaのブリッジを開発していて、文字列の変換処理で困っています。
現象)
JavaのUTF-8は非標準的な形式 (https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/types.html#modified_utf_8_strings) なので、Ruby側の文字列をそのままUTF-8にエンコードして与えると、Java側ではサロゲートペアに相当する文字を正しく認識できません。
お願い)
Java固有の拡張UTF-8は一般性が欠けていると考えられますが、ほぼ互換のCESU-8 (https://www.unicode.org/reports/tr26/tr26-4.html) は、IANAの文字セットにも登録されていて通信などでそれなりに利用されているようなので、RubyのEncodingでサポートしていただきたいと思います。

よろしくご検討ください。


Related issues

Related to Ruby master - Feature #15995: Add encoding conversion for CESU-8 from and to UTF-8ClosedActions

Associated revisions

Revision 7f64a0b4
Added by naruse (Yui NARUSE) 22 days ago

Add new encoding CESU-8 [Feature #15931]

History

#1

Updated by naruse (Yui NARUSE) 29 days ago

  • Description updated (diff)
#2

Updated by naruse (Yui NARUSE) 22 days ago

  • Status changed from Open to Closed

Applied in changeset git|7f64a0b4db7ee27a04579236950d88301c7bcabb.


Add new encoding CESU-8 [Feature #15931]

Updated by duerst (Martin Dürst) 19 days ago

念のために言っておきますが、https://www.unicode.org/reports/tr26/tr26-4.html に「It is not intended nor recommended as an encoding used for open information exchange.」と書いてあります。くれぐれもよくご注意ください。

さらに、https://www.unicode.org/reports/tr26/ に「CESU-8 documents an obsolete internal-use encoding scheme for Unicode identical to UTF-8 except for its representation of supplementary characters.」と「CESU-8 is not intended nor recommended as an encoding used for open information exchange. Therefore, there is no need to develop this report any further.」と書いてあります。

これはあくまでも完全に Java 側の問題で、なぜ Ruby 側で対応しないといけないのか全く分かりません。できれば Revision 7f64a0b4 を逆戻りしていただきたいです。Ruby が文字コードの混乱に貢献してほしくないからです。

Updated by naruse (Yui NARUSE) 19 days ago

duerst (Martin Dürst) wrote:

念のために言っておきますが、https://www.unicode.org/reports/tr26/tr26-4.html に「It is not intended nor recommended as an encoding used for open information exchange.」と書いてあります。くれぐれもよくご注意ください。

さらに、https://www.unicode.org/reports/tr26/ に「CESU-8 documents an obsolete internal-use encoding scheme for Unicode identical to UTF-8 except for its representation of supplementary characters.」と「CESU-8 is not intended nor recommended as an encoding used for open information exchange. Therefore, there is no need to develop this report any further.」と書いてあります。

これはあくまでも完全に Java 側の問題で、なぜ Ruby 側で対応しないといけないのか全く分かりません。できれば Revision 7f64a0b4 を逆戻りしていただきたいです。Ruby が文字コードの混乱に貢献してほしくないからです。

「RubyとJavaのブリッジ」と書かれていますが、リンク先を見るとこれはJNI (Java Native Interface) の話で、要するにJavaからはCESU-8でデータが渡ってくるということです。
渡ってきたらもうRubyで扱うしかないのでこれはRubyの問題です。

Rubyの問題であり、実際にユーザーが少なくとも一人いるならばこれは対応するべきです。

文字コードの混乱という懸念は10年前ならあったでしょうが、もはやUTF-8が最高にして唯一の文字コードであることは誰の目にも明らかです。
もっとUTF-8を信じてあげてください、revertはしません。

Updated by duerst (Martin Dürst) 18 days ago

naruse (Yui NARUSE) wrote:

文字コードの混乱という懸念は10年前ならあったでしょうが、もはやUTF-8が最高にして唯一の文字コードであることは誰の目にも明らかです。
もっとUTF-8を信じてあげてください

勇気づけありがとうございます。書き込みの一つの目的は、CESU-8 の立場をはっきりさせることでした。

「RubyとJavaのブリッジ」と書かれていますが、リンク先を見るとこれはJNI (Java Native Interface) の話で、要するにJavaからはCESU-8でデータが渡ってくるということです。
渡ってきたらもうRubyで扱うしかないのでこれはRubyの問題です。

本来 Java の問題には変わりがありませんが、Ruby で対応する必要があるかもしれません。しかし、対応の仕方はいろいろあります。

現在の対応だと、CESU-8 は dummy ではなく、本格的なものになっています:

$ ./ruby -e 'Encoding::CESU_8.dummy?.display'
false

大文字小文字の変換さえできます:

$ ./ruby -e 'puts "Dürst".force_encoding("CESU-8").upcase.force_encoding("UTF-8")'
DÜRST

しかし、UTF-8 への変換はできません:

$ ./ruby -e '"Dürst".encode("CESU-8")'
Traceback (most recent call last):
        1: from -e:1:in `<main>'
-e:1:in `encode': code converter not found (UTF-8 to CESU-8) (Encoding::ConverterNotFoundError)

CESU-8 と UTF-8 の立場を考えると、むしろ逆の方がいいのではないでしょうか。Encoding は dummy でよいが、変換は用意した方がいいのではないか、ということです。少なくとも提案者に一回確認した方がよかったのではないでしょうか。

Rubyの問題であり、実際にユーザーが少なくとも一人いるならばこれは対応するべきです。

「実際にユーザーが少なくとも一人いる」は Ruby に新機能を導入基準としてで今まで何回通用したなのでしょうか。これから何回通用するでしょうか。

#6

Updated by duerst (Martin Dürst) 4 days ago

  • Related to Feature #15995: Add encoding conversion for CESU-8 from and to UTF-8 added

Updated by duerst (Martin Dürst) 1 day ago

  • Status changed from Closed to Open

Reopened to consider whether we can make the CESU-8 encoding a dummy encoding now that we have the encoding conversion from/to UTF-8 (see issue #15995).

Also available in: Atom PDF