[#40528] [Feature #2833] 絵文字エンコーディングの提案 — Kenta Murata <redmine@...>

Feature #2833: 絵文字エンコーディングの提案

32 messages 2010/03/02
[#40530] Re: [Feature #2833] 絵文字エンコーディングの提案 — Yukihiro Matsumoto <matz@...> 2010/03/02

まつもと ゆきひろです

[#40597] Re: [ruby-list:46898] 重複組合せは組込みにならないのでしょうか? — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>

きしもとです

17 messages 2010/03/12
[#40598] Re: [ruby-list:46898] 重複組合せは組込みにならないのでしょうか? — Yukihiro Matsumoto <matz@...> 2010/03/12

まつもと ゆきひろです

[#40601] Re: [ruby-list:46898] 重複組合せは組込みにならないのでしょうか? — Yusuke ENDOH <mame@...> 2010/03/12

遠藤です。

[#40608] Re: 組込みの重複順列・重複組合せ — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp> 2010/03/13

> 同様に、repeated_permutation/combination のデフォルト引数にも反対

[#40610] Re: 組込みの重複順列・重複組合せ — Yukihiro Matsumoto <matz@...> 2010/03/13

まつもと ゆきひろです

[#40641] [Bug #2965] method `===' called on hidden T_STRING object (NotImplementedError) — Kenta Murata <redmine@...>

Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)

12 messages 2010/03/15

[#40649] [Feature #2968] 数値の正負を返すメソッド — Yui NARUSE <redmine@...>

Feature #2968: 数値の正負を返すメソッド

17 messages 2010/03/15

[#40650] [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Yui NARUSE <redmine@...>

Feature #2969: String#to_f が -h.hhh±pd を解釈できるように

38 messages 2010/03/15
[#40728] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/22

質問ですが、この形式は入力だけでなく、なんらかの方法で出力でも利用でき

[#40732] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/22

成瀬です。

[#40736] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/23

> String#to_f は従来から指数表記を許していたので、

[#40738] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/23

成瀬です。

[#40745] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/24

> to_i がデフォルトで prefix を見ないのは、0377 のような、

[#40747] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/24

成瀬です。

[#40749] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/24

> 先のパッチの対象関数が ruby_strtod である通り、

[#40759] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/25

成瀬です。

[#40762] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/25

> strtod(3) の解釈対象に含まれていない 2 進や 8 進を否定することが、

[#40763] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/25

(2010/03/26 3:05), Tadayoshi Funaba wrote:

[#40764] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — Tadayoshi Funaba <tadf@...> 2010/03/25

> なぜ同じなのでしょう。

[#40782] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/26

(2010/03/26 4:02), Tadayoshi Funaba wrote:

[#40786] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — KOSAKI Motohiro <kosaki.motohiro@...> 2010/03/27

>> strtod(3) を参考にしたり、影響されたりすることは普通にあるとは思います

[#40788] Re: [Feature #2969] String#to_f が -h.hhh±pd を解釈できるように — "NARUSE, Yui" <naruse@...> 2010/03/27

(2010/03/27 18:19), KOSAKI Motohiro wrote:

[#40695] keiju, please check tickets assigned to you — Yusuke ENDOH <mame@...>

いしつかさん

15 messages 2010/03/18

[#40779] [Feature #3018] UNINITIALIZED_VAR() マクロの導入 — Motohiro KOSAKI <redmine@...>

Feature #3018: UNINITIALIZED_VAR() マクロの導入

12 messages 2010/03/26

[#40805] Improvement of Fiber switching cost with system dependent way — SASADA Koichi <ko1@...>

 ささだです.

10 messages 2010/03/28

[ruby-dev:40721] Re: URI methods for application/x-www-form-urlencoded

From: Tanaka Akira <akr@...>
Date: 2010-03-20 15:36:28 UTC
List: ruby-dev #40721
2010年3月17日4:45 NARUSE, Yui <naruse@airemix.jp>:

>> * URI.encode_www_component

>>    * 生成結果の encoding は引数の encoding になりますが、
>>      まずい場合もあるのではないでしょうか。
>>      引数が UTF-16BE など ASCII非互換の場合にはあからさまにまずくて、
>>      生成した % という文字が文字になりません。
>>
>>      これも実際には困らない気はします。
>
> これも修正します。

考えたのですが、これはうまくないようです。

% ./ruby -ruri -e '
v = URI.encode_www_form_component("aあ".encode("UTF-16BE"))
puts v.dump, v.encoding'
"\x00a%30%42"
US-ASCII

この例の結果は、最初の 2バイトは UTF-16BE な a という文字で、
それ以降は US-ASCII な %30%42 という 6文字というものになっています。
これはひとつの文字列の中に UTF-16BE と US-ASCII が混ざっていて、
あからさまに変です。

http://www.w3.org/TR/html5/forms.html#url-encoded-form-data の

 4. For each character in the entry's name and value, apply the following
    subsubsteps:

     1. If the character isn't in the range U+0020, U+002A, U+002D, U+002E,
	U+0030 to U+0039, U+0041 to U+005A, U+005F, U+0061 to U+007A then
	replace the character with a string formed as follows: Start with
	the empty string, and then, taking each byte of the character when
	expressed in the selected character encoding in turn, append to the
	string a U+0025 PERCENT SIGN character (%) followed by two
	characters in the ranges U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE
	(9) and U+0041 LATIN CAPITAL LETTER A to U+0046 LATIN CAPITAL
	LETTER F representing the hexadecimal value of the byte
	(zero-padded if necessary).

     2. If the character is a U+0020 SPACE character, replace it with a
	single U+002B PLUS SIGN character (+).

という部分を読むと、selected character encoding が何か、
という点が問題になります。
この文書のもうちょっと上の方には selected character encoding は
なにか ASCII-compatible character encoding を選ぶということが書いてあります。

UTF-16BE はあからさまに ASCII-compatible character encoding ではないのですが、
あえてその点は無視して選んでしまったときに何が起きるかというと、
"aあ" という文字列の各文字 ("a", "あ") それぞれについて、
"a" は U+0061 なのでリストに入っているためそのままにして、
"あ" は U+3042 なのでリストに入っていなくて、
selected character encoding (今回は UTF-16BE) で表現された文字 (0x30, 0x42)の
各バイトそれぞれについて、%HH の形式にするので、"%30%42" になり、
全体を合わせると "a%30%42" という結果になります。
(そして、この中に U+0020 は入っていないので + になるところはありません)

そして、RFC 3986 (URI) を考えると、
%30 や %42 に対応する ASCII 文字は unreserved なので、
それらは percent encoding にするかどうかで意味が変化しないことになっています。
つまり、%30 は 0 と等価で、%42 は B と等価です。
というわけで、"a%30%42" という文字列をデコードすると "a0B" にせざるを得ません。
つまり、もともとの "aあ" という文字列が伝わりません。

つまり、ASCII-compatible character encoding を選ぶことになっているのには理由があります。
無視するのはよろしくありません。

思い浮かぶ対策としては、以下くらいでしょうか。

* 自動的に UTF-8 に変換
* ISO-2022-JP などと同じく、すべてのバイトを percent encoding
* 例外

なお、ISO-2022-JP など Unicode 以外の ASCII incompatible encoding ですべての
バイトを percent encoding にするという現状の動作は変えなくていいと思います。

>> * URI.decode_www_component

>>    * 第2引数として encoding を指定可能にすべきではないでしょうか。

> そうですね、デフォルトは UTF-8 にしましょうか。

デフォルトじゃなくて強制になっています。

% ./ruby -ruri -e '
v = URI.decode_www_form_component("%A1%A2", "EUC-JP")
p v
p v.encoding
'
"\xA1\xA2"
#<Encoding:UTF-8>

せっかく enc 引数を受け付けているのに、使っていません。

あと、TBLDECWWWCOMP_['+'] = ' ' if i == 0x20 が
ループの中にあるのは無駄でしょう。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread