SlideShare una empresa de Scribd logo
1 de 123
A reintroduction to Ruby M17N NARUSE, Yui
序 今日はみなさんに日本を生まれた事を後悔してもらいに来ました の、つもりだったのだが…… 「地球に生まれた事に」になってしまった……
話す事・話さない事 話す事 文字コード Ruby M17N 話さない事 メッセージの切り替え 時刻・時間とか通貨とか
コンピュータで文字を扱う 表示・印刷 字形 (グリフイメージ) 字体 (グリフ) 書記素クラスタ (grapheme cluster) コードポイント 符号化文字集合 (コードユニット) (UTF-16/32) バイト 文字符号化方式 処理・格納
「文字コード」とは 「文字」をコンピュータで扱う仕組みのうち、比較的低層の部分 つまり、グリフやフォントよりちょっと下まで 扱う文字を決め、番号を振る 文字列を番号列、バイト列、ビット列にする
文字集合 Abstract Character Repertoire どのような文字を扱うか ある文字とある文字が同じか違うかの決定 何文字扱うか、扱えるか 必要な文字 vs. メモリサイズ・性能
何を扱うか アラビア数字 アルファベット大文字 ― 6bit アルファベット小文字 ― 7bit カタカナ ― 8bit ひらがな 漢字 絵文字 など ― 16bit などなどなど ― 21bit
文字の同定 ある文字とある文字が等しいかどうかの決定 包摂規準 (その文字の射程範囲の決定) 何が一文字か e.g. リガチャ「ffi」 典拠の確保―いい加減だと幽霊文字が混じったり、重複したり e.g. 妛𡚴 「あけんばら」で検索
字形の違い 色々な「フォント差」「書体差」 aaaaaaaaa 「g」「g」メガネg「l」「l」ループL 言 言言
字体の違い JISでは同じだがUnicodeでは別 「高」と「髙」 「吉」と「𠮷」 JISでもUnicodeでも同じコードポイント
符号化文字集合 CCS / Coded Character Set 文字集合を構成する「文字」、一つ一つに番号を振ったもの 一般にはこの番号を「コードポイント」 Unicode の場合 「Unicode Scalar Value」 「あ」->U+3042 (Unicode) JIS X 0208 「ビット組合せ」や「区点コード」 「あ」->04区02点 (JIS X 0208)
符号化文字集合の例 ASCII 英数記号 ISO/IEC 8859-1 アクセント付き文字 JIS X 0201 いわゆる半角カナ JIS X 0208 第一・第二水準漢字など JIS X 0212 補助漢字など JIS X 0213 第三・第四水準漢字など Unicode いろいろ
JIS X 0208 http://www.kanji.zinbun.kyoto-u.ac.jp/~yasuoka/kanjibukuro/japan.html
文字符号化方式 CES, Character Encoding Scheme 符号化文字集合の番号をバイト列に変換する方式 Shift_JIS 「あ」 -> 04区02点 -> "82¥xA0" 「い」 -> 04区04点 -> "82A2" UTF-8 「あ」 -> U+3042 -> "E38182" 「い」 -> U+3044 -> "E38184"
エンコーディング encoding (W3C) charset (IETF) あるバイトデータを解釈するには、「文字符号化方式」と「符号化文字集合」を共に特定する必要 Shift_JIS "82¥xA0" -> 04区02点 -> 「あ」 UTF-8 "E38182" -> U+3042 -> 「あ」
IANA Charset 各々のエンコーディングに名前を付けて登録管理 インターネット上に流すデータは登録されてる必要 一部のエンコーディングは実態と乖離も http://www.iana.org/assignments/character-sets ISO-2022-JP EUC-JP Shift_JIS Windows-31J
用語の整理 charset Character setが由来と思われるため、「文字集合」の意味に感じられるが、用法としてはencodingと同じ 文字コード 文字集合 encoding ある文字のコードポイント
Unicode用語集 UCS-2は文字集合ではなくencoding ISO/IEC 10646の定義13.1 Two-octet BMP form (UCS-2) This coded representation form permits the use of characters from the Basic Multilingual Plane with each character represented by two octets. Unicodeの定義 “UCS-2. ISO/IEC 10646 encoding form: Universal Character Set coded in 2 octets, limited to the Basic Multilingual Plane.” http://www.unicode.org/glossary/#UCS_2
History of I18N Internationalization, 国際化 I .{18} N I18N S12N (Scherpenhuizenさんが元祖) http://blog.miraclelinux.com/yume/2007/01/i18n_8bc0.html
略語解説 L10N (Localization) (地域化) それぞれの地域・言語に適したようにすること ある言語に対応すること cf. nls (national language support) I18N (Internationalization) (国際化) 地域化しやすいように、あらかじめソフトウェア側を抽象化しておくこと 言語を切り替えて使用できるようにすること M17N (Multilingualization) (多言語化) 複数の言語などで利用するためにローカライズ 同時に複数の言語を扱えるように (Ruby)
国際化というからには 元は国際対応じゃない 最初はどうだったのか?
始まりはASCII 1970年頃 ASCII以前から文字コードはあった ASCIIは電信の遺産を継承している まぁ情報通信的にはASCIIから始まる ていうかISO/IEC 646でしょ EBCDICのことを忘れないでください
http://www.ecma-international.org/publications/standards/Ecma-006.htm ECMA-6 IRV(≒ ASCII)
ASCIIに含まれる文字種 アラビア数字 アルファベット大文字 アルファベット小文字 記号 全94文字
文字が足りない アクセント付きアルファベット(ISO 8859シリーズ) 577文字 いわゆる半角カタカナ(JIS X 0201) 56+7文字 漢字など(JIS X 0208) 6355+524文字
ASCIIを拡張しよう JIS X 0201 (ASCII 亜種・8bit化) ISO-8859-1 (8bit化) ISO-2022-JP (エスケープシーケンス) SJIS / EUC / UTF-8 (マルチバイト) UTF-16 (16bit化) UTF-32 (32bit化)
拡張したよ! ASCII-8BIT, UTF-8, US-ASCII, Big5, Big5-HKSCS, Big5-UAO, CP949, Emacs-Mule, EUC-JP, EUC-KR, EUC-TW, GB18030, GBK, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, KOI8-R, KOI8-U, Shift_JIS, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, Windows-1251, IBM437, IBM737, IBM775, CP850, IBM852, CP852, IBM855, CP855, IBM857, IBM860, IBM861, IBM862, IBM863, IBM864, IBM865, IBM866, IBM869, Windows-1258, GB1988, macCentEuro, macCroatian, macCyrillic, macGreek, macIceland, macRoman, macRomania, macThai, macTurkish, macUkraine, stateless-ISO-2022-JP, eucJP-ms, CP51932, GB2312, GB12345, ISO-2022-JP, ISO-2022-JP-2, CP50221, Windows-1252, Windows-1250, Windows-1256, Windows-1253, Windows-1255, Windows-1254, TIS-620, Windows-874, Windows-1257, Windows-31J, MacJapanese, UTF-7, UTF8-MAC Ruby 1.9.2 サポート予定分
どうしてこうなった? 制約の中でベストを尽くそうとするため メモリ容量 処理速度 プログラミングの複雑さ 必要な文字の違い ベンダ間の調整不足 結局、ほっとけば文字コードは増える ->統一への努力
どうしよう……? 敵を知るしかない 知った上で個別撃破 たいていの罠は「歴史的経緯」 歴史を知る事が重要
ISO 646―分裂の始まり ISO/IEC 646 ASCIIのISOバージョン 一部の文字の置き換えを認めている 択一 #/£ $/¤ 任意 [ \ ] ^ { | } ~
ISO 646の各国ごとの違い http://ja.wikipedia.org/wiki/ISO_646 http://en.wikipedia.org/wiki/ISO/IEC_646
ISO 646 文字の意味論の違い 赤字は文字合成を許すもの。例: <A BS “>-> Ä
まだまだ足りない アクセント付きアルファベット(ISO 8859シリーズ) 577字 いわゆる半角カタカナ(JIS X 0201) 56+7字 漢字など(JIS X 0208) 6355+524字
ISO/IEC 2022 Character Code Structure andExtension Techniques ISO 646を拡張した文字コードの作り方を定める 具体例 ISO 8859シリーズ (8bit化) ISO-2022-JP (エスケープシーケンス) EUC系 (多バイト) シフトJISやUTF-8などは違う
http://www.ecma-international.org/publications/standards/Ecma-035.htm ECMA-35(≒ ISO/IEC 2022)
ISO/IEC 2022の構造 20 | 7F A0 | FF A ESC ( BA 漢 ESC $ B 4A 8E (SS2) JIS X 0208 US-ASCII EUC-JP G1 EUC-JP G2 JIS X 0212 EUC-JP G3 JIS X 0201 ローマ字 JIS X 0201 片仮名 JIS X 0213
ISO 2022のバイト列 どの文字集合を使うか指定 バッファへの指示 (stateful) バッファからの呼び出し シングルシフト ロッキングシフト(stateful) その文字集合のどの文字を使うか指定
ISO/IEC 2022系の欠点 状態を持つ事 (持たないものもあるが) 文字コードがどんどん増える 文字コードごとに別のコードが必要になる 規格が複雑になってしまった
Unicode 1986年頃からXeroxとAppleが始める 1988年ISOにUnicode 88を持ち込む 1991年1.0 (漢字なし), 1992年1.0.1 1993年1.1でISOと同期 1996年2.0, UTF-8とUTF-16登場 2002年3.2でJIS X 0213対応 2010年末6.0で絵文字対応?
Design Of Unicode 文字コードから地域・言語を分離 1つのUnicode文字列には複数の言語を混ぜられない フラットな空間に全ての文字を入れる 16bit -> 32bit UTF-16の制限から1,114,112文字種 用字系が同じならば文字統合
漢字統合 plaintext+encodingからフォントを決定できない
一見大きな問題に見えるが トルコ語では”i”.upcase->“İ” ドイツ語では”ss”.upcase->“ß” 実はASCIIの範囲も言語の指定が必要
There Ain't No Such ThingAs Plain Text. Joel Spolsky http://www.joelonsoftware.com/articles/Unicode.html TEXT needs Encoding and Language
Legacy Encoding Unicode以前の文字コードたち Unicode時代のプログラムで動かすには変換して取り込む必要 変換表をどうするか? 人によって変換表が異なると問題
ご存じですか? CP932 他の話がさっぱりでも「CP932の存在」だけは知って帰って頂きたい Windows Codepage 932 IBM Codepage 932とは微妙に違う Windows版シフトJIS 正式名称: Windows-31J JIS規格由来のShift_JISと変換表が異なる CP932を用いるといくつかの問題を回避可能
円記号問題「 問題の始まり ISO 646系の0x5C JIS X 0201 円記号 ¥ ASCII バックスラッシュ \
ISO 646の各国ごとの違い http://ja.wikipedia.org/wiki/ISO_646 http://en.wikipedia.org/wiki/ISO/IEC_646
どこで問題になるか? まずは表示上の問題 「円記号」のつもりが「バックスラッシュ」で表示 JIS X 0201データをASCII端末で表示 「バックスラッシュ」 のつもりが「円記号」で表示 ASCIIのデータをJIS X 0201端末で表示 取り違えると「文字化け」する
制御コードとの衝突 バックスラッシュは制御記号扱い C言語のエスケープ記号 MS-DOSのパス区切り文字 同じ0x5Cの円記号も同じ扱いに   「えんいー」
シフトJISと円記号問題 「表」はシフトJISでは 95 5C シフトJISを理解しないプログラムで問題 % cat yen.rb puts "表" % ruby1.8 ./yen.rb ./yen.rb:1: unterminated string 	meets end of file
理由 puts "表" puts "955C" p u t s " 95 " puts "95quot; 引用符を閉じていない扱いに! unterminated string meets end of file
回避方法 Ruby 1.8の場合 -Ks Ruby 1.9の場合 magic comment % cat yen.rb #coding:Windows-31J puts "表" % ruby1.8 -Ks ./yen.rb 表
Unicodeと円記号 シフトJISの0x5CをUnicodeに変換 Shift_JISの0x5Cは本来JIS X 0201 JIS X 0201扱いなら、U+00A5 ASCII扱いなら、U+005C EUC-JPの0x5CはASCIIのはず
それぞれの変換の問題 ASCII: 0x5CがU+005Cになると、 表示がバックスラッシュになる? JIS X 0201: 0x5CがU+00A5になると、 パス区切りではなくなる ソースコードのエスケープじゃなくなる
Windowsでの解決 0x5CはU+005Cに変換する (ASCII風) 日本語用フォントでは、U+005Cのグリフを「円記号」にする 5C = U+005C : REVERSE SOLIDUS (YEN SIGN) http://msdn.microsoft.com/en-us/goglobal/cc305152.aspx 韓国のウォンでも同様の問題 5C = U+005C : REVERSE SOLIDUS (WON SIGN) http://msdn.microsoft.com/en-us/goglobal/cc305154.aspx
波ダッシュ問題「~」 JIS X 0208: U+301C(WAVE DASH) CP932: U+FF5E(FULLWIDTH TILDE) 問題 WindowsはU+301CをシフトJISに戻せない CP932の変換テーブルにないから XP添付のフォントでU+301Cを表示しようとすると、誤ったグリフになる「〜」(Vista以降では修正済み)
Shift_JISとCP932の違い
機種依存文字 マイクロソフト標準キャラクタセット NEC特殊文字 ①Ⅰ㌶など IBM拡張文字 ⅰ¦﨑髙など NEC選定IBM拡張文字
CP932風別エンコーディング CP51932 Windows版日本語EUC CP932にある機種依存文字がある JIS X 0212がない Web上の「EUC-JP」はこれかも CP50221 Windows版ISO-2022-JP いわゆる半角カナがある CP932にある機種依存文字がある
シフトJIS関連の名前 「シフトJIS」 マイクロソフトウェア・アソシエイツが名付けた。総称として用いられる 「Shift-JIS」「Shift JIS」 「シフトJIS」の英語表記 「MS漢字コード」 開発者の山下による命名 「SJIS」 Unix方面での名前 「Shift_JIS」 IANA Charsetでの名前 「シフト符号化表現」 JIS X 0208:1997 附属書1 「Shift_JISX0213符号化表現」 JIS X 0213:2000 付属書1 「Shift_JIS-2004符号化表現」 JIS X 0213:2004付属書1 「CP932 (Windows Codepage 932)」 Microsoft実装 「Windows-31J」 CP932のIANA Charsetでの名前 「IBM CP932」 MS CP932とは別物 「IBM943」 MS CP932とおおむね同じ、JIS X 0201 「IBM943C」 MS CP932と同じ、ASCII
日本語EUC関連の名前 「日本語EUC (圧縮形式)」 情報交換用のEUC、普通はこれ 「日本語EUC (固定長形式)」 System V での内部表現 「eucJP」 UI-OSF日本語環境実装規約で定義 「EUC-JP」 IANA Charsetでの名前 「UJIS」 ΣOSでの名前 「CP51932」 Internet Explorerでの日本語EUC実装 「eucJP-ms」 TOG/JVC CDE/Motif 技術検討 WGが定義 「EUC-JISX0213」 JIS X 0213:2000 付属書3 「EUC-JP-2004」 JIS X 0213:2004 付属書3
処理系の課題 内部エンコーディングを何にするか 様々なencodingの入力の扱い 地域・言語ごとに異なる規則
内部コードはどうするか UCS正規化 内部では特定の1つに変換する CSI (Code Set Independent) それぞれの文字コードに対応する
UCS正規化 Universal Character Set Java, Perlなどほとんどが採用 内部コードを統一 入出力で変換が必要 入力はそのコードに変換 内部コードで処理 出力時に再び変換
CSI方式 それぞれのencodingに対応 入出力を変換しない 入力そのまま取り込む そのまま処理 そのまま出力
Java 開発時期: 1990~1995 内部コード: UTF-16 (サロゲートペアは1.5から) 文字型: char (コードポイントは int) 文字列型: java.lang.String グリフ列: CharSequence, BreakIterator等 「Javaにおける Unicode補助文字のサポート」 Windows NT も同時期
.NET Framework 2000年リリース 内部コード: UTF-16 文字型: Char構造体 (コードポイントは Int32) 文字列型: System.String グリフ列: System.Globalization.StringInfo http://msdn.microsoft.com/ja-jp/library/system.globalization.stringinfo.aspx http://msdn.microsoft.com/ja-jp/library/system.globalization.cultureinfo.aspx
Perl 5.6 2000年リリース 内部コード: UTF-8 文字型: なし 文字列型: バイト列 / 文字列 (utf8 フラグ) Perlは「型」の概念が薄い http://github.com/github/perl/blob/blead/utf8.c
Python 1.6 2000年リリース 内部UTF-16 文字型: char (UTF-16 code unit; 16bit) 文字列型: String (UTF-16) http://www.egenix.com/www2002/python/unicode-proposal.txt
Ruby1.8 内部コード: ASCII/SJIS/EUC/UTF-8 文字型: Fixnum(8bit) 文字列型: String $KCODEでプロセスの文字コードを指定 「文字」のサポートはほとんどない
Ruby 1.9 2007年1.9.0リリース 2009年1.9.1リリース 内部コード: N/A (CSI) 文字: 1文字String 文字列型: String グリフ列: なし
Ruby 1.9の特徴 Stringが文字単位になった バイト操作と文字操作を区別する必要 CSI方式 特定の内部エンコーディングがない Stringそれぞれがencodingを持つ 正規表現エンジンの刷新 鬼車ベースに変更
文字志向なString "あいう".length-> 3 "あいうえお"[0]-> "あ" "あい".gsub(/あ/,"か")-> "かい" "abc".tr("abc","あいう")-> "あいう"
String#each_* String#each_byte String#each_codepoint String#each_char String#each_line String#eachは削除された
1文字String 専用の文字型は無い 文字は1文字Stringで表す ?a -> "a" "abc"[0] -> "a" "abc"[0] == ?a は1.9でも成り立つ
「文字」型に必要なもの コードポイント, Encoding, (言語) Stringは両方持っている Rubyは大クラス主義 Stringを使えばよい
Ruby 1.9のRegexp /(.)/ =~ "あ" -> 0 $1 -> "あ" // =~ "あ" -> nil 1.9.1-p376 以降、1.9.2 以下はUnicode系 /({Alphabetic})/ =~ "あ" $1 -> "あ" /({Ideographic})/ =~ "漢" $1 -> "漢"
1.9のStringに必要なこと 適切にencodingが設定されていること 理由 Stringのencodingを見て処理するから 設定方法 Magic comment(リテラル) IO のオプション (入出力) String#force_encoding(強制指定)
encodingが誤っている時 invalid multibyte char (US-ASCII) Magic comment忘れ Encoding::CompatibilityError 異なったencodingのStringを混ぜた時 文字列をバイナリ扱いのままにしている時 ArgumentError: invalid byte sequence 単純な指定ミス 壊れた入力
Magic Comment リテラルのエンコーディングを指定 String, Regexp デフォルトはUS-ASCII Magic CommentがないとソースにASCII以外を書くことはできない #coding:utf-8 #!/usr/local/bin/ruby#coding:utf-8 # -*- coding: UTF-8 -*-
ERB用 Magic Comment ERBでもMagic Commentが必要 <%# coding: UTF-8 %>
IOとEncoding 入出力のencodingを指定する 外部リソースのencodingを指定 open("foo.txt","r:UTF-8") 未指定ならEncoding.default_external
ネットワークからの入力 Socket, Net::HTTPなど 現在はバイナリAPI扱い ->文字列の場合は自分でEncodingを設定する必要
Encodingの強制指定 String#force_encoding(enc) 任意のencodingの文字列をバイナリから作りたい時 str = "E38182"str.force_encoding("UTF-8")str #=> "あ" 外部から来たデータに設定する時 IOなら外部エンコーディングを設定するべき socketやnet系のライブラリで必要
$KCODE is obsolete $KCODEは内部コード指定のため使われた Ruby1.9ではシステム全体の内部コードは、 決定不可能なため、廃止。 $KCODEを参照しているスクリプトは注意
結局encodingとは Stringにとっての「型」 型が違えばエラー 型同士で互換性があれば、自動変換されることも->ASCII互換でのasciionly
Encodingの3分類 ASCII互換 ASCII非互換 ダミー
ASCII互換 フルサポート Rubyスクリプトのソースエンコーディングとして使用可能 UTF-8, Shift_JIS, EUC-JP, ...
Major Encodings US-ASCII ASCII-8BIT UTF-8
日本語用 Shift_JIS EUC-JP
Other Encodings Big5, Big5-UAO, EUC-KR, EUC-TW, GBK, ISO-8859-X, KOI8-R, KOI8-U, etc
Windows機種依存 Windows-31J CP51932 eucJP-ms Windows-125X
ASCII-8BIT ASCII互換バイト列 バイナリだけどASCII互換 ASCII互換の恩恵を得るため
ASCII Only 特別扱い ASCII互換エンコーディング 内容が7bit "abcde".ascii_only?->true "abcde" + "あいうえお" ASCII互換エンコーディングなら、両者のエンコーディングによらず成功
ASCII非互換 限定サポート ソースコードには使えない UTF-{16,32}{BE,LE}
UTF-16 & UTF-32 UTF-16BE, UTF-16LE UTF-32BE, UTF-32LE しかし、UTF-16 や UTF-32 には非対応 BOM対応が困難なため
Dummy encoding Ruby は名前を知っているだけ 「文字」のサポートはしない for stateful encodings Encoding#dummy?-> true ISO-2022-JP, UTF-7
Encoding 「エンコーディング」を司るクラス CSIではエンコーディングが内部処理でも使われるから活躍 でも、たいていエンコーディング名を表す文字列でよい
Encodingの取得 enc = Encoding.find(“UTF-8”)=> #<Encoding:UTF-8> Encoding.find(“external”)デフォルト外部エンコーディング Encoding.find(“internal”)デフォルト内部エンコーディング Encoding.find(“filesystem”)ファイルシステムエンコーディング Encoding::UTF_8定数も定義されている
Encodingの一覧 Encoding.listオブジェクトの配列 Encoding.aliases別名 => 本名 のHash Encoding.namesEncoding.findの引数になるStringの配列
Encodingの情報 enc.name=> “UTF-8” enc.names=> ["UTF-8", "CP65001", "locale", "external", "filesystem"] enc.dummy?ダミーエンコーディングかどうか enc.ascii_compatible?ASCII互換かどうか
エンコーディング変換 nkf kconv iconv uconv String#encode Encoding::Converter
nkf Network Kanji Filter 歴史ある変換コマンド 使うなら --ic, --ocオプションを使う事
kconv nkfのラッパー String#tosjisなどと簡単 歴史的経緯による意図しない挙動 勝手にMIMEデコード いわゆる半角カナが全角に もはやオススメしない
iconv POSIX由来のiconv(3)のラッパー 挙動が環境依存 glibc/GNU libiconv/Citrus/… 1.9ではあえて使う必要はないはず
uconv Unicode 変換用拡張モジュール 0.5.3から1.9.1に対応しているが、互換性確保用に止めるべきであろう http://www.yoshidam.net/Ruby_ja.html
String#encode Ruby 1.9独自のtranscode String#encode(to, from, opt) たいていの用途はこれでいけるはず
Encoding::Converter transcodeのエンジン 変換を一時停止・再開したい時 常人は使わないはずだが、何かの間違いで必要になるかもしれない
Don't forget… 不必要な変換は避ける open()等の引数に指定
Ruby M17N の難しさ テストがしづらい US-ASCII ASCI-8BIT UTF-8 (ASCII Compatible) UTF-16 (ASCII Incompatible) ISO-2022-JP (dummy encoding)
SJISとWindows-31J Windows環境 Magic commentなどでSJISを指定 Encoding::CompatibilityError 入力はWindows-31Jだから ->Windows-31J指定が正しい あなたがSJISだと思っているのは、実はWindows-31Jです
ASCII-8BIT Ruby M17N未対応のライブラリを使った時 ネットワーク系やDB系など 明示的にエンコーディングを指定 String#force_encoding(enc)
ASCII非互換の正規表現 ASCII非互換エンコーディングな正規表現はリテラルで書けない UTF-16LEの正規表現リテラルは書けない Regexp.newを使う Regexp.new(	"あ".encode("UTF-16LE"))
Open problems ケータイ絵文字 WindowsのUnicodeパス 結合文字 異体字セレクタ/IVS Stringと言語 Stateful encoding Unicode用ユーティリティ
ケータイ絵文字 mrknさんや設楽さんたちが作業中 1.9.2に入るかも
WindowsのUnicodeパス 一部対応その他非対応 方針としては、現在WindowsのA系APIを叩いているものを、W系APIを使うように変える そこら中で踏むのでリソース不足 いじれる方が居たらパッチください Win32-unicode-testブランチ
結合文字 「が」を「か」+「゛」で表す 複数のコードポイントを1文字扱いする必要 Stringの「文字」をこれにする変更が入った事はあるが巻き戻された [ruby-dev:36375] 「文字」の単位がUnicodeのバージョンに依存 エスケープなどに影響 JavaのBreakIteratorっぽいものが必要? 検討中
異体字セレクタ/IVS Ideographic Variation Sequence 結合文字同様、複数のコードポイントを1文字扱いする必要
Stringと言語 日本語と中国語を同時に扱いたい 日本語と中国語を1つのStringに入れたい 可能かは文字コードによります UTF-8ではできません Unicodeは言語を別に与えないといけない Stringにencodingとlangを持たせる必要 現状ユースケース不足
Stateful encoding 現状ダミーエンコーディング 改善予定無し
Unicodeユーティリティ 文字幅 Unicode正規化 Unicode大文字小文字化 APIをどうするか そもそもどこにいれるのか
String#sort デフォルトでは文字コード順 シフトJISや日本語EUCの系統と、Unicode系のエンコーディングで並び順が変わる 現状ではsortにblock引数を指定する RubyにはCollationとかは添付されていない 自分で比較ルーチンを用意して渡す
Feedbackを よいAPIを設計するには、ユースケースの収集が大事なのでfeedbackが重要 失敗談等はruby-listへ バグ・提案はruby-devへ オレはようやくのぼりはじめたばかりだからなこの果てしなく遠いM17Nをよ… 未実装

Más contenido relacionado

Destacado

全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題tsudaa
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 
Rubyのエンコーディング
RubyのエンコーディングRubyのエンコーディング
RubyのエンコーディングMasahiro Tomita
 
tofu - COOKPAD's image system
tofu - COOKPAD's image systemtofu - COOKPAD's image system
tofu - COOKPAD's image systemIssei Naruta
 
Japanese Rubyists you have not met yet
Japanese Rubyists you have not met yetJapanese Rubyists you have not met yet
Japanese Rubyists you have not met yetmasayoshi takahashi
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHiroshi SHIBATA
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案nagachika t
 
CloudTrail でログとれ〜る
CloudTrail でログとれ〜るCloudTrail でログとれ〜る
CloudTrail でログとれ〜るHokuto Hoshi
 
Inspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuningnagachika t
 
Ruby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of RubyRuby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of RubyYuki Sonoda
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のりRecruit Lifestyle Co., Ltd.
 

Destacado (13)

全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 
Rubyのエンコーディング
RubyのエンコーディングRubyのエンコーディング
Rubyのエンコーディング
 
131026 kansai-emacs
131026 kansai-emacs131026 kansai-emacs
131026 kansai-emacs
 
tofu - COOKPAD's image system
tofu - COOKPAD's image systemtofu - COOKPAD's image system
tofu - COOKPAD's image system
 
Japanese Rubyists you have not met yet
Japanese Rubyists you have not met yetJapanese Rubyists you have not met yet
Japanese Rubyists you have not met yet
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
 
Practical ngx_mruby
Practical ngx_mrubyPractical ngx_mruby
Practical ngx_mruby
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案
 
CloudTrail でログとれ〜る
CloudTrail でログとれ〜るCloudTrail でログとれ〜る
CloudTrail でログとれ〜る
 
Inspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuning
 
Ruby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of RubyRuby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of Ruby
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり
 

Similar a A Reintroduction To Ruby M17 N

UnicodeによるXSSと SQLインジェクションの可能性
UnicodeによるXSSとSQLインジェクションの可能性UnicodeによるXSSとSQLインジェクションの可能性
UnicodeによるXSSと SQLインジェクションの可能性Hiroshi Tokumaru
 
私のSql -My Sql
私のSql -My Sql私のSql -My Sql
私のSql -My Sqlstiq 2e
 
アセンブラ漢文
アセンブラ漢文アセンブラ漢文
アセンブラ漢文kozossakai
 
It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1Kenichi Takeuchi
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsmganeko
 
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合Ryusuke Kajiyama
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 

Similar a A Reintroduction To Ruby M17 N (12)

UnicodeによるXSSと SQLインジェクションの可能性
UnicodeによるXSSとSQLインジェクションの可能性UnicodeによるXSSとSQLインジェクションの可能性
UnicodeによるXSSと SQLインジェクションの可能性
 
文字化け
文字化け文字化け
文字化け
 
RISC-V User level ISA
RISC-V User level ISARISC-V User level ISA
RISC-V User level ISA
 
私のSql -My Sql
私のSql -My Sql私のSql -My Sql
私のSql -My Sql
 
RISC-Vの可能性
RISC-Vの可能性RISC-Vの可能性
RISC-Vの可能性
 
RISC-Vの可能性
RISC-Vの可能性RISC-Vの可能性
RISC-Vの可能性
 
アセンブラ漢文
アセンブラ漢文アセンブラ漢文
アセンブラ漢文
 
It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1
 
PFI Seminar 2010/02/18
PFI Seminar 2010/02/18PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
 
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 

Último

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 

Último (10)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 

A Reintroduction To Ruby M17 N