アカウント名:
パスワード:
> C/C++を触っているプログラマーなら
じゃあ他の言語のプログラマーはEBCDICコードでも使ってるのでしょうか?ASCIIコードは言語に依存しないですよ。(ISO8859でも、Unicodeでも、16進数でいう20、10進数でいう32はスペースですからねえ)。
ASCIIコードは言語に依存しないですよ。(ISO8859でも、Unicodeでも、16進数でいう20、10進数でいう32はスペースですからねえ)。
馬脚だな。
UTF-16L (今のWindowsで最もよく使われるはずの文字コード) の場合、 0x20 0x00 0x20 0x00 0x20 ... 0x00.のようになるので、今回とは違う数字になる。
確かにスペースは「0x20」だろう。しかし「1バイトの」0x20でスペースが表現できるには、ASCII か UTF-8。
フレームワークなんかがトラブル防止のために0x00をエスケープして消しちゃうシステムも普通にあったりします。クレジット会社のシステムに連結するところにそんなのが組み込まれてる可能性も否定できないでしょう。(バージョンアップでセキュリティ対策としてそんな仕様変更が組み込まれ、技術者がその辺を理解しないままバージョンアップしちゃった、とか普通にあり得ます。)
ついでに、送られてきた情報のバイト数を見て「文字列なのか数値なのか」を判断するようなシステムも実際に日本の某銀行では稼働していたりするので、例えば
0x31 0x00 0x30 0x00(UTF-16LEの文字列で「10」)
が、0x00をエスケープされた結果
0x31 0x30 となり、バイト数が2バイトしかなかった為に「整数型」と判断された挙げ句、「12592(10)」と解釈される、等と言うことはあってもおかしくありません。(「2バイトの時は整数型、それ以上なら文字列として扱う」なんて仕様が本当にあったりする。もちろん「文字が1文字だけ送られてくることは仕様上ありえない」のが前提。)
さて、どっちが馬脚なのやら。
# 上に書いた「某銀行」の中の人なのでAC# 仕様として正しいとは思わないけどね、自分も。
どうでもいい枝葉末節にそんな長文で突っ込んで、何か楽しいのかな?「それはasciiとUTF-8だけなので注意。UTF-16では0x20 0x00になったりします」と1行書けば済むのに。
その枝葉末節をおろそかにするところにバグは潜むわけで強調したくなる理由はわかる。
#ところで引用分までいれて空白込みの238文字(引用抜き空白込みで163文字)って長文か?#楽しいかどうかは本人次第だろうし、丁寧に例まで挙がってて私には#1607108よりは「参考になる」よ?#馬脚云々は余計かもしれないけど、コメント全体としては「フレームのもと」とは思えないな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
16進数の20はC/C++に特有なのか? (スコア:0, フレームのもと)
> C/C++を触っているプログラマーなら
じゃあ他の言語のプログラマーはEBCDICコードでも使ってるのでしょうか?
ASCIIコードは言語に依存しないですよ。(ISO8859でも、Unicodeでも、
16進数でいう20、10進数でいう32はスペースですからねえ)。
Re:16進数の20はC/C++に特有なのか? (スコア:-1, フレームのもと)
馬脚だな。
UTF-16L (今のWindowsで最もよく使われるはずの文字コード) の場合、
0x20 0x00 0x20 0x00 0x20 ... 0x00.
のようになるので、今回とは違う数字になる。
確かにスペースは「0x20」だろう。しかし「1バイトの」0x20でスペースが表現できるには、ASCII か UTF-8。
fjの教祖様
Re:16進数の20はC/C++に特有なのか? (スコア:3, 興味深い)
フレームワークなんかがトラブル防止のために0x00をエスケープして消しちゃうシステムも普通にあったりします。クレジット会社のシステムに連結するところにそんなのが組み込まれてる可能性も否定できないでしょう。
(バージョンアップでセキュリティ対策としてそんな仕様変更が組み込まれ、技術者がその辺を理解しないままバージョンアップしちゃった、とか普通にあり得ます。)
ついでに、送られてきた情報のバイト数を見て「文字列なのか数値なのか」を判断するようなシステムも実際に日本の某銀行では稼働していたりするので、例えば
0x31 0x00 0x30 0x00(UTF-16LEの文字列で「10」)
が、0x00をエスケープされた結果
0x31 0x30 となり、バイト数が2バイトしかなかった為に「整数型」と判断された挙げ句、「12592(10)」と解釈される、等と言うことはあってもおかしくありません。
(「2バイトの時は整数型、それ以上なら文字列として扱う」なんて仕様が本当にあったりする。もちろん「文字が1文字だけ送られてくることは仕様上ありえない」のが前提。)
さて、どっちが馬脚なのやら。
# 上に書いた「某銀行」の中の人なのでAC
# 仕様として正しいとは思わないけどね、自分も。
Re: (スコア:0)
どうでもいい枝葉末節にそんな長文で突っ込んで、何か楽しいのかな?
「それはasciiとUTF-8だけなので注意。UTF-16では0x20 0x00になったりします」
と1行書けば済むのに。
Re:16進数の20はC/C++に特有なのか? (スコア:1)
その枝葉末節をおろそかにするところにバグは潜むわけで強調したくなる理由はわかる。
#ところで引用分までいれて空白込みの238文字(引用抜き空白込みで163文字)って長文か?
#楽しいかどうかは本人次第だろうし、丁寧に例まで挙がってて私には#1607108よりは「参考になる」よ?
#馬脚云々は余計かもしれないけど、コメント全体としては「フレームのもと」とは思えないな。
Re: (スコア:0)