X



文字コード総合スレ Part12
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
垢版 |
2018/12/17(月) 16:48:24.47ID:Pfqpaohb
プログラマーなら一度は煩わされたことのある文字コードについてのスレ。
UTF-8、Shift_JIS、JIS、EUC、Unicode、UCS、サロゲートペア、コードポイント、文字コード判定、
合成文字、ソート、TRON、外字コード、その他について語り合いましょう。
各言語での文字列の扱いについての質問もOKです。
基本マッターリ、ささ、茶でもどうぞ。

■過去スレ
文字コード総合スレ part1 http://pc11.2ch.net/test/read.cgi/tech/1031028205/
文字コード総合スレ part2 http://pc11.2ch.net/test/read.cgi/tech/1143375639/
文字コード総合スレ part3 http://pc11.2ch.net/test/read.cgi/tech/1180250376/
文字コード総合スレ part4 http://pc11.2ch.net/test/read.cgi/tech/1228052369/
 (スレ再利用)UnicodeとUTF-8の違いは? http://pc12.2ch.net/test/read.cgi/tech/1177930957/
 (隔離スレ)UnicodeとUTF-8の違いは? その2 http://pc12.2ch.net/test/read.cgi/tech/1274937437/
文字コード総合スレ part5 http://pc12.2ch.net/test/read.cgi/tech/1236529563/
文字コード総合スレ part6 http://hibari.2ch.net/test/read.cgi/tech/1278923059/
文字コード総合スレ part7 http://toro.2ch.net/test/read.cgi/tech/1306595564/
文字コード総合スレ part8 http://peace.2ch.net/test/read.cgi/tech/1354248962/
文字コード総合スレ part9 http://peace.2ch.net/test/read.cgi/tech/1401301779/
文字コード総合スレ Part10 http://mevius.2ch.net/test/read.cgi/tech/1444822140/
文字コード総合スレ Part11 http://mevius.5ch.net/test/read.cgi/tech/1516629503/
0839デフォルトの名無しさん
垢版 |
2021/04/18(日) 22:45:16.09ID:124qy3KD
議論の理由も似てるかも
free()が必要かどうかは環境による。基本は必要最低限で使え。
BOMが必要かどうかは環境による。基本は必要最低限で使え。
というのが正しい答えだが、特定の環境のみ前提に主張するやつや、
念のためにいれておこうと考える不届き者のせいで話が混乱する。
0841デフォルトの名無しさん
垢版 |
2021/04/19(月) 00:38:28.03ID:VxMGqS+h
>>837
俺はこれ知らんかったけど、太田・久野・河野…とそうそうたるメンバーですなあ懐かしい
0843◆QZaw55cn4c
垢版 |
2021/04/19(月) 00:43:04.40ID:6sLSrXGT
>>839
それに「そもそも BOM という名前が」云々の原理主義者もお忘れなく、あー私のことか‥‥
0844デフォルトの名無しさん
垢版 |
2021/04/19(月) 01:58:51.92ID:mD3HRAYB
つまりBOMの話題はプログラマ界隈にとって爆弾のようなものだ、とこういうことか
0845デフォルトの名無しさん
垢版 |
2021/04/19(月) 03:49:32.03ID:v/IxVhS5
>>844
ミニマム・シンプルというのがプログラムの基本というのが理解できないやつがいる。
「不必要なものは入れるな」というのは最低限の知識.
0846デフォルトの名無しさん
垢版 |
2021/04/19(月) 05:11:58.25ID:krfx63YD
パーセントエンコーディングした文字列を正確にURL引数に渡すには
文字エンコーディングをサーバーに教えるためのパラメーターが別途必要になる。
だが、しかしサーバー側アプリにはBOMの情報をまるっと捨て去って平然と不具合を起こす権利がある。
文字エンコーディングをサーバーに教えるためのパラメーターと同じ役割を果たすのがBOM。
テキストエディタやコンパイラやブラウザはBOMをガン無視する権利がある。
0847デフォルトの名無しさん
垢版 |
2021/04/19(月) 09:26:00.95ID:v/IxVhS5
すっげー、面白い解釈してるな。どの規格読んだの?
URI は全体で一つの文字列なので、BOM つけるのなら最初の https: とかの前につけないと意味ないんだが?
そんな規格違反の URI に対応する必要があるという主張? それとも文字列の途中に BOM を入れて解釈しろという主張?
0850デフォルトの名無しさん
垢版 |
2021/04/19(月) 13:35:40.29ID:v/IxVhS5
それは不要なもの入れる入れないではなくて、拡張性のある実装と拡張性の乏しい実装の違い。
unicode の文字の中には余計なものもあることは認めるが、それは関係ない。
0852デフォルトの名無しさん
垢版 |
2021/04/19(月) 15:24:44.16ID:v/IxVhS5
その辺は既に結論が出てる。
UTF-8: 可変長だが ASCII 互換。欧米の文章で長さが最短化。必要なら32bitまで拡張可能。外部コードに最適
UTF-32: 固定長。必要なら32bit分の文字まで拡張可能。内部コードに最適。
UTF-16: メリットがない。拡張性ない。オワコン。将来は特定のOSやプログラム言語やアプリで過去の遺物として残る
0853デフォルトの名無しさん
垢版 |
2021/04/19(月) 16:02:17.06ID:krfx63YD
UTF-32が固定長なのはすべての文字が32bit長に収まる時期限定の話でしかない
いずれUTF-64を固定長として定義してUTF-32を可変長にせざるを得ない
そしていつの日かUTF-64も可変長になる日が来る
以後ループ
0855デフォルトの名無しさん
垢版 |
2021/04/19(月) 17:22:51.43ID:qMbr31eM
> UTF-8: 可変長だが ASCII 互換。欧米の文章で長さが最短化。
って言ってるのに、これが
欧米ではない文章だとUTF-16に劣るという
意味になるってわかってないのかな?
0856デフォルトの名無しさん
垢版 |
2021/04/19(月) 17:25:16.03ID:qMbr31eM
UTF-16だと2バイトですむのに、UTF-8だと3バイト必要だからな
データ量が33%増加する
0857デフォルトの名無しさん
垢版 |
2021/04/19(月) 18:49:55.06ID:v/IxVhS5
日本語の漢字かな中心の文章や、中国語の文章などでは UTF-16 の方が短かくなるけど
欧米のやつらは日本語での長さなんて気にもかけないので。もはや UTF-16 はオワコンで意見が固まってる。
欧米のやつらはラテン・アルファベットで効率が良いことと、自分たちが大量に持っている過去のASCIIの資産との互換が最優先。
日本のすみっこで、いくら叫んでも世界の流れは変えられないのだ。
少し腹立つけど仕方ない。
0858デフォルトの名無しさん
垢版 |
2021/04/19(月) 20:32:37.17ID:FUkgXBz9
WindowsやJavaの内部エンコードに使われている限り生き続けるだけだろ。日本がどうとか関係ない。

>欧米のやつらはラテン・アルファベットで効率が良いことと、自分たちが大量に持っている過去のASCIIの資産との互換が最優先。

そのマルチバイトエンコーディングからUTF-16に乗り換えたWindowsやJavaの中の人は欧米なんだが。
もしかしたらUTF-8を推したいのかもしれないけど論理が支離滅裂。
0859デフォルトの名無しさん
垢版 |
2021/04/19(月) 21:18:27.77ID:krfx63YD
U+xxxxxxxxで表現されるバイト列をRAWデータで扱うための概念としてUTF-16,UTF-32は必要とされ続ける
0861デフォルトの名無しさん
垢版 |
2021/04/20(火) 03:31:33.46ID:CoLJETkU
これからはUTF-16の時代だって思うやつがいるんなら英語の掲示板に行ってぜひ布教してくれ。
もう世の中の流れは変わってることがわかる。昔に戻せるならやってみてくれ。
無理だと思うが、個人的には嬉しいので。
0863デフォルトの名無しさん
垢版 |
2021/04/20(火) 08:00:32.57ID:4H0suX3D
これからはUTF-16の時代だなんて思う奴はまずいないだろうが、
これからもUTF-16の時代が続くと思う奴はいるだろう。
0865デフォルトの名無しさん
垢版 |
2021/04/20(火) 10:27:53.52ID:iwSiTlyl
>>861
これからもなにもずっと前からUnicodeの時代で
UTF-16もUTF-8もその表現の一つでしかないんだが
WindowsのAPIは柔軟だから両方に対応してるね
0866デフォルトの名無しさん
垢版 |
2021/04/20(火) 21:54:20.56ID:tx5tKo/k
U+xxxxxxxxで表現されるバイト列をRAWデータで扱うためとしても
UTF-16は桁が足りないんだからUTF-16を使っている箇所はUTF-32に移行すべき
0867デフォルトの名無しさん
垢版 |
2021/04/21(水) 18:18:57.57ID:e3R+sPu0
ASCII文字も1文字=7bitを前提にした文字の並びになっているから
1文字=8bitを前提に文字の並びを変えて
ISO646による言語別の文字の変更(バックスラッシュが円マークになる)も
廃止すればシンプルになっていいね。
ISO8859でもASCII文字の部分は何も変えなかったのは
ASCIIとISO646が普及してしまって変えられなかったから?
0869デフォルトの名無しさん
垢版 |
2021/04/21(水) 18:26:38.07ID:U7I+mJcY
過去のファイルは編集されずにずっと残るんだから古いファイルを
開くために仕様や規格を廃止することは不可能だよ
これからの話しか見えてないのは視野が狭すぎる
0870デフォルトの名無しさん
垢版 |
2021/04/21(水) 20:28:41.18ID:4tTi5uFJ
過去の文字コードってASCIIでしょ。だったらUTF-8でそのまま読めるじゃん。というのがアメリカンの発想。
ローカルなSJISなどというものは念頭にない。ASCIIに比べれば大した量ではないので変換でも何でもしろくらいに思ってる。
オープンソース系のアプリとか気の早いやつは、もうUTF-8以外のサポート切り捨てようとか本気で言い出してる。
まだ時期尚早と説得してるが、どうなることやら。
0871デフォルトの名無しさん
垢版 |
2021/04/21(水) 20:58:34.18ID:nyleF7PB
もうAltコード覚えてしまってるから勘弁して
まあ今もアプリ側でマップしてるだろうけど、文字セットの実装が失われると参照が難しくなり方言化が進む
なにより二重ループで一覧表生成出来なくなるだろうしやだー
0872デフォルトの名無しさん
垢版 |
2021/04/21(水) 21:14:40.01ID:jJZA2zpG
コードポイント=エンコードにできるはずの128-255を捨てるutf-8一人勝ちは避けたい
欧州文字セットでも記号類とか重宝する
8-bitクリーンかを気にする機会減ってきたし、新規参入の機会では
ダイアクリティカルマークは別バイトにすれば記号いっぱい詰め込めるだろ
0873デフォルトの名無しさん
垢版 |
2021/04/21(水) 21:40:19.43ID:U7I+mJcY
>>870
あのさ頭が悪いって言われるでしょ
過去のファイルの対応を切り捨てるのは現実的じゃないか
仕様や規格からShiftJISが消えることはないという話をしてるの
誰もアプリが使う文字コードの話なんかしてないの
0874デフォルトの名無しさん
垢版 |
2021/04/21(水) 21:40:20.19ID:U7I+mJcY
>>870
あのさ頭が悪いって言われるでしょ
過去のファイルの対応を切り捨てるのは現実的じゃないか
仕様や規格からShiftJISが消えることはないという話をしてるの
誰もアプリが使う文字コードの話なんかしてないの
0875デフォルトの名無しさん
垢版 |
2021/04/21(水) 21:56:14.69ID:tWbCEelV
Windows用実行バイナリの場合、システムの文字コードに依存したC言語ライブラリを使ってコンパイルされた実行バイナリが大部分だから、移行は簡単じゃないよ。
新しいライブラリにリンクするよう作り直したバイナリを再配布する必要がある。動作検証がたいへん
0877デフォルトの名無しさん
垢版 |
2021/04/21(水) 22:29:47.38ID:nyleF7PB
お堅くwin32API叩いて書かれたバイナリの互換性は驚異的だよな
MSが気まぐれに出しては忘れるフレームワーク叩いてたら知らんが

バイナリ配布文化を育ててしまった原因でもあるが、ここまで大事にしてきたのにエンコード対応なんかで折れてもらっては残念
win10(64bit)でoffice97が元気に動くのは誇っていい
0881デフォルトの名無しさん
垢版 |
2021/04/21(水) 23:20:34.30ID:tWbCEelV
Cで書かれたレガシープログラムほぼ全部なので挙げるまでもないんだけど、有名どころだとPerlだね
システムコード以外の文字を含むファイル名をperlに引数で渡せない
0882デフォルトの名無しさん
垢版 |
2021/04/21(水) 23:26:30.87ID:tWbCEelV
Cで書かれたmain()関数にはシステムコードページで引数が渡されるのだけど、その時点で文字化けしてるので復元不能。
0885デフォルトの名無しさん
垢版 |
2021/04/22(木) 11:48:03.64ID:cA5EjL24
>>867
勿論普及してたからはあるだろうけど、そもそも変えるとかまた作り直すとかいう発想が無かったんじゃないかな。

ASCII制定→ISO 646制定→各国で変えられるのは10文字とか足りる訳無いだろ!→
ASCIIを拡張して8ビットフルに使おう→ISO 8859制定

とかそんな流れでしょ、増やして積んでけばいいと。当時のことは資料でしか知らないけどたぶん。
0886デフォルトの名無しさん
垢版 |
2021/04/22(木) 20:15:21.29ID:H07mHdZr
メールで添付ファイルを送ろうとしたらbase64でエンコードされたせいで容量オーバーした
ネットワークのトラフィックを減らすためにもメールでバイナリデータをエンコード無しで送れるのが標準化すればいいのに
0887デフォルトの名無しさん
垢版 |
2021/04/22(木) 22:46:03.04ID:XWZJYEFR
いち早く国際化はずのjavaもシステムのコードページでしか引数を受け取れない制約がある
0888デフォルトの名無しさん
垢版 |
2021/04/23(金) 00:48:19.99ID:/P9+MOWj
ほんまに?
Unicode対応していながら_wmain()とかGetCommandLineW()使ってないとは信じがたいが
0890デフォルトの名無しさん
垢版 |
2021/04/23(金) 03:25:56.54ID:z5iGgWRG
Windows 専用ソフトでなくて、複数のOSに対応したソフトは当然そうなる。
特に Unix 系からの移植ならロケールをコードページに対応させるのは当たり前。
Windows独自の特殊APIで実装とか頭の悪いローカル変更は極力しない。
0891デフォルトの名無しさん
垢版 |
2021/04/23(金) 03:27:43.26ID:Apsl8RTN
というか単にC言語がASCII互換の文字コードしか
対応できないんだよな
そこは言語側の問題だと思う
0892デフォルトの名無しさん
垢版 |
2021/04/23(金) 03:29:09.72ID:Apsl8RTN
例えばJavaとかはUnicode前提で設計されてるから
当然Javaで作った複数のOS対応のソフトは
WindowsでもUnicodeが使える

これは殆どの言語に当てはまると思う
C#、JavaScript、Ruby、Python、などなど
0893デフォルトの名無しさん
垢版 |
2021/04/23(金) 03:30:29.26ID:Apsl8RTN
そういやC言語はマルチバイト対応の機能は標準化されてないんだっけ?
流石にC++は標準化されてるよな?
0894デフォルトの名無しさん
垢版 |
2021/04/23(金) 04:04:31.01ID:dmQwGyWy
<locale>ヘッダがマルチバイト対応を実現してくれる
問題は誰もlocaleの機能を使ってないことだ
0895デフォルトの名無しさん
垢版 |
2021/04/23(金) 07:26:19.86ID:Apsl8RTN
おや?<locale>ヘッダとはなんのためにあるのでしょう?
使わなくても多言語対応できるのだったのでは?(苦笑)
0896デフォルトの名無しさん
垢版 |
2021/04/23(金) 09:16:27.68ID:z5iGgWRG
CがASCII互換じゃないと駄目ってどこの異世界。そんなもんコンパイラの実装次第。
規格では他の文字コードも考慮されてる。
実際 EBCDIC ですら動くやつあるのに。
0898デフォルトの名無しさん
垢版 |
2021/04/23(金) 13:53:41.29ID:z7/roYpD
>>896
CはASCII互換である必要はないが、
C言語文字列互換、つまり「文字列終端が\0」互換でなければならない
EBCDICはC言語文字列互換だが、UTF-16とUTF-32は互換性がない
0900デフォルトの名無しさん
垢版 |
2021/04/23(金) 23:40:40.33ID:vWq/Hknp
別にnull終端文字列を使うのがスタンダードかつ標準ライブラリもそう期待しているというだけであって、好きに実装したらいいよ
ぶっちゃけ舐めないと文字列長決められないので性能がスケーラブルでないし、null文字衝突の問題もあるし筋が良くない
マトモなCで書かれたテキスト関連アプリ、特にエディタでヌル終端文字列使ってるのなんて皆無だろ
普通はrope、もう少しカジュアルならパスカルストリング
0901デフォルトの名無しさん
垢版 |
2021/04/23(金) 23:42:50.22ID:hyXGjiN1
wcharω
0905デフォルトの名無しさん
垢版 |
2021/04/24(土) 11:01:26.61ID:h7gEVqDL
>>902
Linux/Unix のプログラムはほとんど stdlib 使ってるけど、何か問題でも?
exit() とかの基本関数は stdlib にあるんだよ。
0906デフォルトの名無しさん
垢版 |
2021/04/24(土) 11:04:54.55ID:fOHAtvcd
OS l17n
0907デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:26:44.28ID:A8uXloOI
C言語を捨てろと言ってるんだろ
他の言語に移ったところで文字コードから逃れることはできないがな
0910デフォルトの名無しさん
垢版 |
2021/04/24(土) 15:57:56.64ID:lkpB631F
>>893
C++はヤバすぎる
utf-8用の1B型を最近標準化したけど、まともに実装されてないし設計もユルユル
WGの中の人がサードのライブラリ引いてね発言するくらいヤバい
0911デフォルトの名無しさん
垢版 |
2021/04/24(土) 16:15:59.56ID:lum8vFBO
結局の所Unicode対応ができてないのはC/C++の言語自体と
無能なC/C++プログラマが根本的な原因なんだよな

無能なくせにクソ言語を使うなと
0912デフォルトの名無しさん
垢版 |
2021/04/24(土) 17:52:30.16ID:h7gEVqDL
OSなどの実行環境まで含めて全部をセルフ記述できる言語だけがC言語をけなして良い。
C言語の代わりになる高級アセンブラとか存在しないのが実情。
0915デフォルトの名無しさん
垢版 |
2021/04/25(日) 01:01:32.24ID:mV4e9R8D
>>912
C言語(とその派生)が無くなると世の中のほぼ全ての言語が一緒に死ぬからなあ。
ハンドアセンブルのマシン語は残るとして他に生き残りそうなやつって何があるだろうか?
汎用機のCOBOLとかなら大丈夫か?
C言語で使えない文字コードとかあったらゴミだな。
0916デフォルトの名無しさん
垢版 |
2021/04/25(日) 09:44:53.64ID:5WfSbj4L
Lisp MachineではFortranもCもlispで書かれていたのじゃよ、もうlisp専用ハードが無いけど…
今のハードがほぼC用に設計されているというだけ
それでもソフト資産が莫大だからCエミュレータは不滅だろうが
0917デフォルトの名無しさん
垢版 |
2021/04/25(日) 12:49:28.15ID:mV4e9R8D
lispマシンは滅びたのじゃよ。
javaマシンは産まれもしなかった。
別に今のCPUがCに合わせて設計されてるわけではない。
Cのオプティマイザーが頑張って今のCPUにあわせてるだけ。
lisp で lisp コンパイラと CPU オプティマイザ書けば理論的には同じことができるはずだけど誰もしようとしないだけ。
これ以上はスレチだな。
0918デフォルトの名無しさん
垢版 |
2021/04/25(日) 13:07:14.30ID:FGclKzDI
lispマシンのタグ付き思想はBOMに近いから関係ない事もないと思う
違うのは自動でオブジェクト=型+ワードから値だけ取り出す機構が(普及して)無いところだな

動的言語がこのまま持て囃され続ければ、ハードウェアGCの可能なlispマシン風ハードが出るかもしれん、何十年後になるか知らんが
0919デフォルトの名無しさん
垢版 |
2021/04/25(日) 13:18:17.37ID:FGclKzDI
アドレス付け単位としてのバイトが8bitでは効率良く型(あるいはエンコ)情報付けるのは厳しいな
文字単位で付けると少なくとも16bitになってしまう
やっぱり36bit時代の話だね
0921デフォルトの名無しさん
垢版 |
2021/04/26(月) 14:21:24.82ID:REE9nEfp
lispすげーの人は夢を語りすぎ
鏡観ろ
0925デフォルトの名無しさん
垢版 |
2021/05/10(月) 21:21:31.93ID:dIUUxNIr
CP932やUTF-8で保存されたテキストファイルをバイナリエディタで見る時、
0x0Dと0x0Aは常にCR・LFに対応するという理解であっていますか

例えば"東"は以下のように保存されますが、0x0Dや0x0Aが含まれる字が存在しない事を確かめたいです。
UTF-8: e6 9d b1
CP932: 93 8c

尚、ファイルは破損しておらず、デコードできない文字は含まれていません
0929デフォルトの名無しさん
垢版 |
2021/05/10(月) 22:33:39.19ID:+j6JaQYv
MSのCP932や、UTF8はASCIIの上位互換。
つまり 0x0A とかは同じ解釈でいける。
UTF16とかUTF32とかは上位互換じゃないので駄目。
0931デフォルトの名無しさん
垢版 |
2021/05/11(火) 00:05:10.05ID:0t6JOZiV
ありがとうございます

>>928
UTF-8では、0x0Dと0x0Aは常にCR・LFと対応するのですね、助かりました
CP932も同様でしょうか

>>929
アスキー文字(0x00-0x7F)のみが書かれる時、CP932もUTF-8も同じバイト列であることは知っていましたが
0x0Dや0x0Aを含む文字が存在しない事を知らなかったので質問しました
例えば「帰」はCP932だと8b 41で、0x41が含まれていますが「A」を表してはいないわけで
同様の例が0x0D 0x0Aに当てはまるのか知りたかったのです
0932デフォルトの名無しさん
垢版 |
2021/05/11(火) 00:06:36.86ID:0t6JOZiV
長すぎたので分割しました

>>930
うわ、どっちも文字がいっぱい……

UTF-8のページ
「エンコード体系」の表が関係しそうだなあ、でもよくわからんなあ。何故2進で書いたし……

あ、16進表記の列もあったのか。どれどれ…、あ、0x80以上なのか。じゃあ0D 0Aを含む文字はないんだなあ

CP932のページ
「構造」の表が関係しそうだなあ、でもこれはutf-8のサブセットのことを言っているのかな、それは知っているけどなあ
うーん、でも他に関連しそうな記載は見つけられないなあ

あ、CP932って必ず2バイトに収まるのか?そしたら第2バイトの0x00-0x3Fが未使用だから、0x0Dと0x0Aは常にCR・LFと対応すると言って良さそうだなあ
0933デフォルトの名無しさん
垢版 |
2021/05/11(火) 01:30:17.15ID:c3IDGufy
CP932に依存するコードを車輪の再発明するのはやめたほうがいい
UTF16を介して処理するのが堅実だよ
0934デフォルトの名無しさん
垢版 |
2021/05/11(火) 02:38:12.81ID:1enRFFJU
CP932だと絵文字が入ったファイル名とか扱えないからね
WindowsがUnicodeなんだからそれに従ったほうが良い
0935デフォルトの名無しさん
垢版 |
2021/05/11(火) 06:46:10.57ID:InyAS07X
>>932
わかりませんでしたって書いてたけどだいたい読めてるじゃん
「自信ないけどこう読み解きました」
「それでおk」
で済む(・∀・)
0936デフォルトの名無しさん
垢版 |
2021/05/11(火) 09:39:59.91ID:Gl0wmygZ
>>933
今更UTF16はないよ。中途半端なゴミ。
UTF32にするべき。じゃなければUTF8で処理する方かまし。
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況