X



文字コード総合スレ Part11

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/01/22(月) 22:58:23.45ID:UK/uqEp5
プログラマーなら一度は煩わされたことのある文字コードについてのスレ。
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/
0590デフォルトの名無しさん
垢版 |
2018/08/05(日) 03:36:24.64ID:oEhLV38F
UTF-16はUTF-8とUTF-32のデメリットを兼ね備えていて、
メリットが無いような気がする。
0591デフォルトの名無しさん
垢版 |
2018/08/05(日) 04:33:54.11ID:kXrZdLCy
このスレに来るような人が、どうしてutf8とutf16/32が同じと思うのか不思議。
自力で文字判定処理をやったことがないスクリプト言語プログラミング一辺倒の人?
0592デフォルトの名無しさん
垢版 |
2018/08/05(日) 08:22:11.27ID:RknsX4qY
>>591
文字コードに習熟したプログラマしかここに来ちゃいけないのかい?
俺みたいにユニコードとUTFの違いすらよくわからない者が情報を求めて
ここに通うこともあるんだぜ
0593デフォルトの名無しさん
垢版 |
2018/08/05(日) 08:42:30.75ID:kXrZdLCy
pythonなんて内部の文字コードutf16だよ。
使う側が意識せずに済んでるってのがむしろ凄いわけで。
utf16要らないとか言ってる人は、事業仕分けでドヤ顔する民主党議員だわ。
0596デフォルトの名無しさん
垢版 |
2018/08/05(日) 14:46:05.09ID:mhm3uufJ
UTF-16はいきなり廃止するのは無理でも
新規設計非推奨くらいにはしてほしいよ
0598デフォルトの名無しさん
垢版 |
2018/08/05(日) 15:00:37.79ID:mhm3uufJ
UTF-16は世界中の文字を固定長で表せるようにすることが目標だったから
16bitではそれができないと分かった以上32bitに変えるべき
0599デフォルトの名無しさん
垢版 |
2018/08/05(日) 20:42:38.42ID:kXrZdLCy
linux64bit版gccは、wchar_tやstd::wstringが既定でutf32だし、徐々に変わっていくでしょう。
0602デフォルトの名無しさん
垢版 |
2018/08/06(月) 15:04:26.69ID:9QlJsUMm
>>600
ほんそれ
ついでにシステムロケールもUTF8はよ
0603デフォルトの名無しさん
垢版 |
2018/08/06(月) 19:56:04.82ID:RHl3d08a
必要な時にUTF32を使えればいいだけなのでそんなに深刻がらなくても大丈夫でしょ。
0604デフォルトの名無しさん
垢版 |
2018/08/06(月) 20:28:33.56ID:JHbMXthk
基本は8で臨時は32で答えが出ているよなあ
日本独自のJIS関係とかもう要らないし
0605デフォルトの名無しさん
垢版 |
2018/08/06(月) 21:09:19.10ID:J3hEGnZ9
そういえば新元号合字ってJIS X 0213とかCP932とかの系統にも入るのかな?
元号合字使ってるとこはUnicodeじゃない古いとこが多そうだからここに入れないと意味半減な気がするけど
0607デフォルトの名無しさん
垢版 |
2018/08/07(火) 04:59:39.09ID:OlmXtX1U
JIS改訂汁
0608デフォルトの名無しさん
垢版 |
2018/08/07(火) 17:57:38.63ID:ym2n+lOO
日本語とか東アジア言語はバイト数の面では
UTF8よりUTF16の方が有利になるのだが。
0609デフォルトの名無しさん
垢版 |
2018/08/07(火) 18:02:30.52ID:pTM8y/Ns
そうでもない
0611デフォルトの名無しさん
垢版 |
2018/08/07(火) 21:15:40.62ID:FooseUHS
お経とかならそうかも
でも普通の日本語の文書はUTF-8で1バイトになる字がわりと使われてるよね
改行もバカにならない
0613デフォルトの名無しさん
垢版 |
2018/08/07(火) 23:58:44.52ID:r6gcb8rL
エディタとかUTF-32に対応してないのが多いよな。
まあ、無駄が多いからな。最上位の1バイトは必ず0x00になるから。
0617デフォルトの名無しさん
垢版 |
2018/08/08(水) 02:09:19.94ID:kZ99Qrjg
余ってる場所を余計なことに使う奴が絶対出てきて、
それを根絶するのに凄い辛い思いをするからヤメレ。
0619デフォルトの名無しさん
垢版 |
2018/08/08(水) 04:37:42.38ID:XhOfYtOw
>>615
utf8でいいよ
0620デフォルトの名無しさん
垢版 |
2018/08/08(水) 08:35:31.20ID:/x3y+p/o
そういえば、utf9というのもあったな。36ビットコンピュータに最適だとか。
0622デフォルトの名無しさん
垢版 |
2018/08/08(水) 16:40:51.17ID:QemCzjVB
Base64
0623デフォルトの名無しさん
垢版 |
2018/08/08(水) 18:02:57.82ID:SZpNbR5J
UTF-24を策定するべきだな。
全ての文字を24ビット(3バイト)で表す。
UTF-32の0x00で固定な最上位バイトを省くというので。
BMP外の文字だらけの文章には有利になるだろう。
0624デフォルトの名無しさん
垢版 |
2018/08/08(水) 22:53:07.77ID:jNIJWXgx
>>623
だな、固定長はUTF-24、可変長はUTF-8でいいだろう
0625デフォルトの名無しさん
垢版 |
2018/08/08(水) 23:15:02.85ID:oJrY5QK4
UTF16はいらないとかUTF24がよいとか、変な書き込みする人、同一人物?
CPUのレジスタは32bitまたは64bitなので、1バイトをコピーするのも4バイトをコピーするのも時間コストは同じだよ。
0630デフォルトの名無しさん
垢版 |
2018/08/09(木) 01:13:33.46ID:BF3jeRnZ
>>626
ファイルサイズがでかくなればそれだけ処理をする回数が増えるからダイレクトに効いてくる。
0631デフォルトの名無しさん
垢版 |
2018/08/09(木) 01:20:56.02ID:BtZU6oOJ
CPUひとつあたりの処理速度は10年前とあまり変わってないけど、搭載できるメモリの量は劇的に増えた。
内部実装がUTF32になって文字列リソースが2〜4倍になったとしても利用できるメモリはそれ以上に激増しているのでまったく問題なし。
むしろUTF16やUTF32のほうが頭打ちのCPUにも優しい、ということがわかるはず。
0634デフォルトの名無しさん
垢版 |
2018/08/09(木) 10:44:02.84ID:NXkdt6vr
>>625
放っとけば居なくなるのに
0636デフォルトの名無しさん
垢版 |
2018/08/09(木) 11:05:58.21ID:OVYf9YNp
UNCODEv6
0637デフォルトの名無しさん
垢版 |
2018/08/10(金) 22:27:21.22ID:GO9W3NJ8
UTF24とかメモリアクセス効率悪すぎるだろ。アライン考えろ。
情報交換用文字コードはエンディアンに依存しないUTF8。
内部用の文字コードはアクセス効率が良いUTF32。
貧乏人専用のUTF16。
それぞれ存在理由があるんだよ。
0638デフォルトの名無しさん
垢版 |
2018/08/10(金) 23:01:06.31ID:d4sNno4d
Windowsの場合、プログラムを何も改修することなくUTF16でサロゲートペアの絵文字を使えているでしょ。
もちろん、文字フォントを描画するAPI、つまりマイクロソフトの中の人が頑張っているからだが。
0639デフォルトの名無しさん
垢版 |
2018/08/10(金) 23:24:23.95ID:d4sNno4d
まぁ、Windowsプログラムで、動的に絵文字の肌色・髪色・性別などを変えようと思ったら、
UTF16のサロゲート処理を自分で行う必要があるけどね。
0642デフォルトの名無しさん
垢版 |
2018/08/11(土) 10:45:32.80ID:0HQvSoaX
SJISと取り決めてあるテキストデータにUTF8をぶっこんできた取引先があって
翌朝からの日本社会に大混乱を引き起こしかねない危機に晒された経験がある
UTF8滅ぶべしと俺は本気で思っている
0643デフォルトの名無しさん
垢版 |
2018/08/11(土) 10:58:00.76ID:kug6FRsz
エンコーディングは関係ないだろ。
決めごとを守れないその取引先と異常データを突っ込まれただけで混乱しちゃうプログラムの問題。
0644デフォルトの名無しさん
垢版 |
2018/08/11(土) 11:30:16.03ID:dFDFw6X4
何年か前に、地域の緊急速報のテストメールか何かに
エンコーディングを混在させて文字化けを地域住民に送って混乱させたのあったな
メールテンプレートのエンコーディングと、流し込む本文で混在させちゃったみたいな
0645デフォルトの名無しさん
垢版 |
2018/08/11(土) 11:51:55.94ID:AWnFhpjF
ないしほてし活復を語本日く書に左らか右どけい良もでき書横
0649デフォルトの名無しさん
垢版 |
2018/08/11(土) 15:56:48.16ID:A8A80vkf
TeXって右から書くのにも対応してるっけ
0650デフォルトの名無しさん
垢版 |
2018/08/11(土) 18:33:53.99ID:Yf3CWOMt
sjisの〜とcp932の〜の違いって何?
〜を入力して検索すると、sjisのほうはヒットしないんよね
0651デフォルトの名無しさん
垢版 |
2018/08/11(土) 19:10:44.45ID:HdyPScyr
>>650
「入力して検索する」
どうやって入力して何を検索するのか他人に分かるように書いたらどうか
入力側がUNICODEで変換不能とかじゃない
0654デフォルトの名無しさん
垢版 |
2018/08/12(日) 14:20:12.48ID:JT/5kO4h
絵文字がんがん増えてるけど、ぱっと見で見分けが付かない微妙なの多いよなぁ
0655デフォルトの名無しさん
垢版 |
2018/08/12(日) 14:26:24.04ID:rtSL/abo
馬鹿は同じ過ちを繰り返す
0657デフォルトの名無しさん
垢版 |
2018/08/13(月) 14:33:07.24ID:1RU0E1KE
この際1byteを32bitか64bitにしたらどうよ
1byteが8bitになったのはアルファベットや数字が固定長で表せて
2^nbitで処理しやすかったからなんだろうけど
1byteが32bitか64bitになればエンディアンの問題もなくなって分かりやすくなる
0658デフォルトの名無しさん
垢版 |
2018/08/13(月) 14:58:06.25ID:obMX332h
そうなんか?
16新数で2桁でちょうどいいからだと思ってた
0659デフォルトの名無しさん
垢版 |
2018/08/13(月) 14:59:26.97ID:obMX332h
あと 8bit を 1byte というけど
4bit のことをなんていうの?
0660デフォルトの名無しさん
垢版 |
2018/08/13(月) 15:02:02.90ID:L5U4GWSY
>>657
8bitや16bitのCPUはどうすんの?
0661デフォルトの名無しさん
垢版 |
2018/08/13(月) 15:15:08.87ID:fDt52YY1
>>657

32bitでも、64bitでも、好きな長さを「word」と呼べばいい。
これで、エンディアンの問題もなくなって分かりやすくなるんだよな。
0663デフォルトの名無しさん
垢版 |
2018/08/13(月) 16:04:07.52ID:obMX332h
Thx!
DNCL
0664デフォルトの名無しさん
垢版 |
2018/08/14(火) 02:11:13.81ID:uURIoDLa
無理。各コンピュータ内部なら好きなビッド数にすれば良いけど、インターネットのほぼ全ての規格はオクテットが基準になってる。
インターネット全部作り直すくらいやらないと今更変更できない。
0665デフォルトの名無しさん
垢版 |
2018/08/14(火) 09:43:35.42ID:UwXfpacN
byteとoctetを区別すればいいだろ
0666デフォルトの名無しさん
垢版 |
2018/08/14(火) 12:58:54.95ID:4hamDsGB
>>584
昔の ISO/IEC 10646 がそんな感じじゃなかったっけ?
UCS-4 が Four-Octet Canonical Form (4オクテット正規形) と呼ばれてて
UTF-8 や UTF-16 はあくまで Transformation Format だと。
0667デフォルトの名無しさん
垢版 |
2018/08/14(火) 13:43:48.36ID:RlMqh1JW
UTF-32に統一できないなら、UTF-8を残そうがUTF-16を残そうが
どちらも大して変わんないんだよね。
UTF-8 も UTF-16 も既存OSの互換性を保つためにあるのだから

UTF-8はANSI互換性というメリットがあるというけれど
なんてことはない、Unix/Linuxの改修が大変だったから、
文字コードのエンコーディング方式自体を作ったってだけの話
互換性のために作ったものだよ

16bitにすべての文字を収めるのは不可能だが、仮に収まったとしたら
UTF-16はサロゲートペアなどなく1文字16bitというシンプルなものになっていた。

もし最初から32bit必要だと認識していれば、UTF-32という1文字32bitに
統一された素晴らしい文字コードになっていただろう
そしてWindowsはそれを標準文字コードとして採用しただろう。
(WindowsがUTF-16なのは、その頃はUnicode = UTF-16の前身のUCS-2 だったから)

結局固定長でないなら、どちらも面倒なことに大差ないし
互換性を保つために面倒な方式を残すのであれば、
それがUTF-8でもUTF-16でも同じこと
0669デフォルトの名無しさん
垢版 |
2018/08/14(火) 15:00:48.27ID:YfFk5ERN
8も16も大して変わらないと言えばそうだけど、種類が少ないに越したことはないし
どっちかひとつ残すならやっぱり8なので、16には退場願いたいね
0671デフォルトの名無しさん
垢版 |
2018/08/14(火) 15:39:29.46ID:tR+8FNHO
>>667
妄想は要らん
asciiとの互換性とosの改修は関係ない
16bitに収まったとしたらとか ifを言い出したらきりがない
0673デフォルトの名無しさん
垢版 |
2018/08/14(火) 16:47:25.95ID:RlMqh1JW
>>671
> asciiとの互換性とosの改修は関係ない

大あり。C言語はASCII互換前提となっている。
具体的に言うと、文字列の終端文字が\0なので
UTF-16やUTF-32といった、1文字の中に\0が
含まれてる場合に対応できない

UTF-8でなければprintfなどの基本的でよく使われる関数
全てをUnicode対応に改修しなければならなかった。
もしくは捨て去さるかだ
0676デフォルトの名無しさん
垢版 |
2018/08/14(火) 17:16:53.37ID:X3bC8nHW
含まれるやろ
0677デフォルトの名無しさん
垢版 |
2018/08/14(火) 17:17:26.99ID:X3bC8nHW
L'\0' は含まれないが '\0' は含まれる
0678デフォルトの名無しさん
垢版 |
2018/08/14(火) 17:18:41.77ID:RlMqh1JW
http://ash.jp/code/unitbl1.htm

41 41 41 41 0041 A
42 42 42 42 0042 B
43 43 43 43 0043 C
44 44 44 44 0044 D
45 45 45 45 0045 E

右から二番目がUTF16の文字コード
見ての通り基本のアルファベットの中に0x00が含まれてる

つまり ABCは、00 41 00 42 00 43 もしくは 41 00 42 00 43 00 という並びとなり
これをprintf等にわたすとASCII文字として1文字8bitと解釈し、
00を\0とみなすので途中で切れるか全く表示されなくなる
0679デフォルトの名無しさん
垢版 |
2018/08/14(火) 17:21:01.63ID:RlMqh1JW
説明足らずな>>675が揚げ足取りだと思われると可愛そうなので(笑)
補足してあげると、UTF-16やUTF-32の1文字はそれぞれ16bit or 32bit で
16bitで\0、32bitで\0 は含まれてないと言いたいのだ

だが今は、printfなど1文字8bitと解釈する関数の話をしているので
8bitずつ見ていくと文字の途中に\0が含まれるのだ
0680デフォルトの名無しさん
垢版 |
2018/08/14(火) 17:37:04.18ID:YfFk5ERN
まあWindowsみたいにcharはロケール依存のままでwchar_tだけUnicodeという構成もあるので
UnixのUnicode対応にUTF-8が必須だったかというとわからんけどなー
0682デフォルトの名無しさん
垢版 |
2018/08/14(火) 20:25:18.83ID:cWcfj41B
正確には、既存のコードの多くは wchar_t が使われて無くて、
その対応が大変だっていう話

WindowsはOSすべてを自分たちで作ってるからどうにかなったが、
オープンソースで他人が作ったものの寄せ集めだと対応が大変だろうね
0683デフォルトの名無しさん
垢版 |
2018/08/14(火) 20:38:21.12ID:+lmSJTba
gcc は、 wchar_t を16bitと32bitでコンパイル時に選択できるようになっているので、のちのちWindows以上に厄介なことになるでしょう。
0684デフォルトの名無しさん
垢版 |
2018/08/14(火) 22:54:07.34ID:YfFk5ERN
>>681
Linuxではそうだけど、Unix一般の話でいうとwchar_tはcharの多バイト文字をひとつの値で表せられるならなんでもいいし
実際BSDはcharがSJISならwchar_tはJISコード
0685デフォルトの名無しさん
垢版 |
2018/08/15(水) 01:31:39.17ID:URD+Lz/b
OSの中とかプログラム言語とかどうでもいい。
インターネットとかの通信プロトコルでオクテット(8bit)単位で交信、終端は0x0A 0x0Dとかの特定のオクテットコード列を使用とかになってるのが多数ある。
内部では好きなビット数で処理すれば良いけど、通信には8bit単位の処理系も必須。
ユニコード使うかどうか以前の問題。
0686デフォルトの名無しさん
垢版 |
2018/08/15(水) 01:44:12.43ID:Vx/KYfiZ
ケチケチ言わずIPV6くらいドカンと拡張しようぜ
0687デフォルトの名無しさん
垢版 |
2018/08/15(水) 02:10:10.66ID:sxh1cciH
wcharは、内部の符号化に依存しちゃいけないし、幅が 16bitか32bitかに依存するのもよくない
使うのがなかなか難しいね

但し、char と混在させるのは単なる誤り。printf に使うと途中で切れるとかいうのは使う側のミス
■ このスレッドは過去ログ倉庫に格納されています

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