From: duerst@...
Date: 2019-06-27T10:28:36+00:00
Subject: [ruby-dev:50806] [Ruby trunk Feature#15931] encoding for CESU-8

Issue #15931 has been updated by duerst (Martin Dürst).


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 に新機能を導入基準としてで今まで何回通用したなのでしょうか。これから何回通用するでしょうか。

----------------------------------------
Feature #15931: encoding for CESU-8
https://bugs.ruby-lang.org/issues/15931#change-78911

* Author: arton (Akio Tajima)
* Status: Closed
* Priority: Normal
* Assignee: naruse (Yui NARUSE)
* Target version: 2.7
----------------------------------------
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でサポートしていただきたいと思います。

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



-- 
https://bugs.ruby-lang.org/