文字コード総合スレ Part11
■ このスレッドは過去ログ倉庫に格納されています
中東の言語は確か右からだったよな やろうと思えば簡単そう sjisの〜とcp932の〜の違いって何? 〜を入力して検索すると、sjisのほうはヒットしないんよね >>650 「入力して検索する」 どうやって入力して何を検索するのか他人に分かるように書いたらどうか 入力側がUNICODEで変換不能とかじゃない 絵文字がんがん増えてるけど、ぱっと見で見分けが付かない微妙なの多いよなぁ そのうち洗練されて象形文字になって、やがて漢字に…あれ? この際1byteを32bitか64bitにしたらどうよ 1byteが8bitになったのはアルファベットや数字が固定長で表せて 2^nbitで処理しやすかったからなんだろうけど 1byteが32bitか64bitになればエンディアンの問題もなくなって分かりやすくなる そうなんか? 16新数で2桁でちょうどいいからだと思ってた あと 8bit を 1byte というけど 4bit のことをなんていうの? >>657 8bitや16bitのCPUはどうすんの? >>657 32bitでも、64bitでも、好きな長さを「word」と呼べばいい。 これで、エンディアンの問題もなくなって分かりやすくなるんだよな。 無理。各コンピュータ内部なら好きなビッド数にすれば良いけど、インターネットのほぼ全ての規格はオクテットが基準になってる。 インターネット全部作り直すくらいやらないと今更変更できない。 >>584 昔の ISO/IEC 10646 がそんな感じじゃなかったっけ? UCS-4 が Four-Octet Canonical Form (4オクテット正規形) と呼ばれてて UTF-8 や UTF-16 はあくまで Transformation Format だと。 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でも同じこと 8も16も大して変わらないと言えばそうだけど、種類が少ないに越したことはないし どっちかひとつ残すならやっぱり8なので、16には退場願いたいね >>669 Windowsという重要な役目があるので無理だってわかってるだろ? >>667 妄想は要らん asciiとの互換性とosの改修は関係ない 16bitに収まったとしたらとか ifを言い出したらきりがない >>670 昔からMSは独自文字コードが大好きだからUNICODEからUTF-16が無くなっても問題ない >>671 > asciiとの互換性とosの改修は関係ない 大あり。C言語はASCII互換前提となっている。 具体的に言うと、文字列の終端文字が\0なので UTF-16やUTF-32といった、1文字の中に\0が 含まれてる場合に対応できない UTF-8でなければprintfなどの基本的でよく使われる関数 全てをUnicode対応に改修しなければならなかった。 もしくは捨て去さるかだ >>672 昔からUnicode対応なんですがーw UTF-16やUTF-32も1文字の中に\0が含まれているわけじゃないがな。 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とみなすので途中で切れるか全く表示されなくなる 説明足らずな>>675 が揚げ足取りだと思われると可愛そうなので(笑) 補足してあげると、UTF-16やUTF-32の1文字はそれぞれ16bit or 32bit で 16bitで\0、32bitで\0 は含まれてないと言いたいのだ だが今は、printfなど1文字8bitと解釈する関数の話をしているので 8bitずつ見ていくと文字の途中に\0が含まれるのだ まあWindowsみたいにcharはロケール依存のままでwchar_tだけUnicodeという構成もあるので UnixのUnicode対応にUTF-8が必須だったかというとわからんけどなー >>680 え? Unixもwchar_tはUnicodeだけど? 正確には、既存のコードの多くは wchar_t が使われて無くて、 その対応が大変だっていう話 WindowsはOSすべてを自分たちで作ってるからどうにかなったが、 オープンソースで他人が作ったものの寄せ集めだと対応が大変だろうね gcc は、 wchar_t を16bitと32bitでコンパイル時に選択できるようになっているので、のちのちWindows以上に厄介なことになるでしょう。 >>681 Linuxではそうだけど、Unix一般の話でいうとwchar_tはcharの多バイト文字をひとつの値で表せられるならなんでもいいし 実際BSDはcharがSJISならwchar_tはJISコード OSの中とかプログラム言語とかどうでもいい。 インターネットとかの通信プロトコルでオクテット(8bit)単位で交信、終端は0x0A 0x0Dとかの特定のオクテットコード列を使用とかになってるのが多数ある。 内部では好きなビット数で処理すれば良いけど、通信には8bit単位の処理系も必須。 ユニコード使うかどうか以前の問題。 wcharは、内部の符号化に依存しちゃいけないし、幅が 16bitか32bitかに依存するのもよくない 使うのがなかなか難しいね 但し、char と混在させるのは単なる誤り。printf に使うと途中で切れるとかいうのは使う側のミス >>687 printfで途切れる云々は仮にLANG=C.UTF-16みたいなロケールがあったとしての話だろ? isdigit等も実装できないし、規格上できないようになってるとは思うけど >>687 printfはchar(のポインタ)を受け取るんだから、wchar_tは使えないでしょ? というかcharで表示できない文字だから、wchar_tが作られたというのが正しい そうなると、printfだけでなく多くの文字列用関数に対して charバージョンとwchar_tバージョンが必要になって、変更しなければいけなくなるよね それが大変だからUnix/LinuxはUTF-16には対応するのは現実的に不可能 対応が簡単なUTF-8を作りました。という流れ。 >>689 > LANG=C.UTF-16みたいなロケールがあったとしての話だろ Unix/LinuxはUTF-16に対応するの大変だから、 そんなロケールは実現できないだろうね 似たような理由EUC-JPは対応できたけど、SJISは対応できなかった と思ったけど以下のような警告出るけど使えるのかw > # localedef -f SHIFT_JIS -i ja_JP /usr/lib/locale/ja_JP.SJIS > キャラクタマップ `SHIFT_JIS' は ASCII 互換ではありません, ロケールは ISO C に従っていません こんなのまで見つけた http://www.ossforum.jp/jossfiles/Linux_SJIS_Support.pdf ダメ文字(文字の一部に\が含まれる場合)にさえ、あたらなければ大丈夫ってことなんかな UTF-16と違って確率的には低いだろうけど >>662 シュメール文明の神アヌンナキたちの故郷の惑星のことかと思った >>690 > 似たような理由EUC-JPは対応できたけど、SJISは対応できなかった kwsk >>693 だからダメ文字だって http://ash.jp/code/code.htm > また、2バイト文字の中に"\"(0x5C)を含むデータが存在するため、文字列がメタ処理されてしまい、文字化けする可能性があります。 LinuxやUnixに限った話ではないけど、 文字を1バイトずつ処理するようなもの(つまりcharポインタ)は ASCIIと互換性がないと不具合の原因になる だからSJISやUTF-16やUTF-32はLinuxやUnixで ネイティブに処理するのは苦手なんだ 中途半端な多encoding対応で不具合が出たという話。要はバグ。 アホか、アホしか居ないか? それともわざとボケてんのか? なんで wchar_t の話と printf の話を一緒に語ってるんだ? wprintf 🤔 >>696 だからprintfで実装されているものをwprintfに修正するのが大変だって話 またwopenfなどワイド文字対応の関数が存在しない場合も存在する。 それに単純に置き換えてしまうと、今度はASCII環境で動かなくなってしまう なぜならwchar_tは16bit または 32bitという固定サイズなので 8bitのASCIIは扱えない(当然可変長バイトのUTF-8もwchar_tでは扱えない) だからwchart_tというものが作られたけど、Linux/Unixはそれを使用して ワイド文字列対応にするのは現実的に不可能と判断し、 printfで扱えるASCII互換のUTF-8を使うことにした ダウト wchar_t で普通に ASCII も使える。当たり前。i18n でプログラム組んだことないだろ? UNIX 系で utf8 が好まれる最大の理由は内部コードとかじゃなくて、ファイル名。 ファイル名に直接 0x00 が入れられないので。あとはネットワークまわり。 そりゃ16bit(つまりUTF-16)として書くか変換すりゃASCIIの範囲の文字列は 扱えるだろうさ、そうじゃなくて8bitのASCII文字が扱えないって話 charは1文字8bitとして定義されたものだが、UTF-8を扱う場合は可変長としても考えられる wchar_tは16bit (または 環境によっては32bit)であるがUTF-16を扱う場合は16bit単位の可変長、 つまりサロゲートペアを扱える。しかしwchar_tは所詮16bit(または32bit)単位なので8bitは扱えない そのためUTF-8のファイルを読み込むときには、wchar_tに変換して読み込まなければいけない。 例えば8bitのASCIIコードであれば残りの8bitを\x00で埋めた16bitのUTF-8に変換するとかしてだ。 このようにASCII互換のデータを扱うためには単純にchar型をwchar_t型に置換しただけでは だめで変換処理が必要になる。それに対してUTF-8であれば、char型を可変長char型と みなすことでそのまま扱うことができる。文字列の長さをカウントするときとか 1文字単位で処理しなければいけないところだけ、UTF-8を扱えるライブラリを使えば良い 訂正 そのためUTF-8のファイルを読み込むときには、wchar_tに変換しながら読み込まなければいけない。 例えば8bitのASCIIコードであれば残りの8bitを\x00で埋めた16bitのUTF-16に変換するとかしてだ。 ファイルシステムに記録された物理的encodingに依存したコーディングができる方が良いという主張かねぇ。 Windows標準のXmlLiteというXMLパーサーは、入力ファイルがどんな文字エンコードだろうと、 UTF16に適宜変換するようになっているので、プログラマに読み取り時の文字エンコード選択の余地はない。 >>701 内部ネイティブ文字コードがcharになっているLinux/Unixでは char非互換の文字コードに対応するのが大変だったという主張 >>702 Windowsは内部ネイティブ文字コードがUnicode(UTF-16)だから 別にそれでいいのでは? それにしても結果論ではあるけど、wchar_tは失敗だったねぇ 16bitでは足りないことは最初からわかっていたけど、たとえ32bitであっても 異字体セレクタやらで意味的な1文字のbit数が固定ではなくなってしまった。 固定でないならば単純な実装で文字を扱うのは不可能。 whar_t使うメリットが無くなってしまった。 まあその怪我の功名で絵文字に色がつけられるようになり、肌色の違いも 対応も可能になったんだけど、これも良かったんだか悪かったんだが。 ここまで来たら絵文字以外の文字も全て色変化対応にしたらって思う そうすりゃエスケープシーケンスなしで色を付けられるよ もはや文字コードじゃないね wchar_t のこと何もわかっていないのに適当なこと言ってるな。 wchar_t は一つのプログラムで複数の文字コードを切り換えて使うための仕組みで、外部用の多バイトコードから内部文字コードに変換するのは当たり前。 char を wchar_t に書き換えるだけで済むとか誰も思っていない。そんなの言うだけ恥かしい。 大きさも規格では少なくとも 8bit で sizeof(wchar_t) >= 1 というだけ。なので 8bit でも 64 bit でも何でも良い。 windows で UTF16、linux の glibc で UTF32 を wchar_t にいれてるのは勝手にそうしてるだけで、そうしないといけないという決まりはないし、そうじゃないOSも普通にある。内部コードなので何を入れてるかはプログラマやユーザが気にする必要はない。 あと「8bit のASCII」とか寝惚けたこと言ってるけどそんなこと言うやつは文字コードの話する資格ない。ASCII が 7bit というのは常識レベルの知識。 常識だし当たり前のことだから、 言ってることに間違いはないってことかな? 今時のまともなMUAでいわゆる半角カナに対応できないものってあるかな? fj全盛の20年前ならいざ知らず。 C/C++ The C and C++ standard libraries include a number of facilities for dealing with wide characters and strings composed of them. The wide characters are defined using datatype wchar_t, which in the original C90 standard was defined as "an integral type whose range of values can represent distinct codes for all members of the largest extended character set specified among the supported locales" (ISO 9899:1990 §4.1.5) Both C and C++ introduced fixed-size character types char16_t and char32_t in the 2011 revisions of their respective standards to provide unambiguous representation of 16-bit and 32-bit Unicode transformation formats, leaving wchar_t implementation-defined. The ISO/IEC 10646:2003 Unicode standard 4.0 says that: "The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers." カンペキな引用 やはりオレのレスはカンペキ 会社のメールは勝手にメールに含まれる半角を全角にかえやがる ※ 必要で半角をいれてるからな 半角でフォルダ名つけるバカがいるせいで その半角を含むパスに格納されてる資料のおいてあるパスを送ると メール送ったあと一時期必ず文句がきてたからな その資料にアクセスできないと そんな場所ないと うんざりしたから この部分が半角ですと書いてやっても アクセスできないと返信が来る 何度か半角でフォルダ名つけたバカを探しだして しばいたろかと思ったわ しばくんじゃなくてフォルダ名を変更すれば済むじゃん あんたタイムゾーンスレでずっとそういう趣旨のこと言ってるよねw フォルダ名は一回変更したわ すると突然 半角以下にあるリンクがすべてアクセスできなくって みなが大騒ぎになったわ そんなことやったのはだれだと 幸いオレがやったとバレずに済んだが メールで送らなければいい 会社のメールを変えればいい 会社を変えればいい 半角君の発想だとこんな感じ >>718 そいつは勘違いしてるよ。 Linux/UnixはUTF-16などASCIIと互換性がない文字コードに 対応するのが大変だからUTF-8を作ったという話をしてるのにそれをわかってない UTF-16に対応しようと思ったら、あちこちで使われてるcharをwchar_tに変えないといけない printfですら使うことができない。まあ現実的に不可能だわな 最初からUnicode(UTF-16)対応として設計開発された Windows NTとは違うわけだ >>719 詳しい解説サンクス wchar_t 難し杉ない? 外国人は鼻ほじりながら「おまいら大変だなー」と同情してるだろうな charで全て賄える文字文化圏が羨ましい >外国人は鼻ほじりながら「おまいら大変だなー」と同情してる その手の輩も今はemojiに対応するために結局Unicodeと向き合わなくちゃならなくなってるけどな >>717 フォルダ名に半角カナ使うなとか原始人かよw バカ「半角カナを使うと文字化けするんだぞ!使うの禁止!」 それは昔メールでよく使われていたISO-2022-JPに半角カナがないのが 理由なのでSJISやEUC-JP、今の主流のUnicodeにはあてはまりません。 ISO-2022-JPでなければ半角カナ使って良いんですよ。 バカ「む、難しい言葉でごまかすな!」 やっぱりバカどもは なんにもわかってないわ。。。 電子メールでいうテキストというのは 7bitだけで表現されたもんをテキストといってるワケ つまり、伝統的にascii(7bit)だけで表現されてるデータをテキストと呼称してる 昔は、7bitのデータしかやりとりできなかったネットワークもあったからな utf−8とかshift−jisとかな、メールでは意味不明なバイナリーなわけ 分かる? そんなテキストもどきでも いまでもプロトコルの規定どおり7bitのデータ以外を発信してはいけないのは当然 Content−Transfer−Encoding: 7bit ← コレは絶対だからな utf−8やshift−jisのテキストもどきならbase64エンコードするとかしないといけない そのままがいいならunicodeのエンコード形式でutf−7という選択肢もある お、書けた ルータ再起動でも書けなかったのに >>727 のレスをサクラで半角全角変換するだけで書けた どの部分がよくなかったのかよくわからん サーバーが>>727 のレスをセキュリティブロックではじいてるみたいだったからな まあいいか 日本のすべてのシステムではずっとな メールのテキスト表示まで保証されてるのはiso-2022-jpにマッピングできる文字だけだからな iso-2022-jpにマッピングできない文字はそもそも保証されてない ※ JISにマッピングできないUnicodeやShift半角カナなんか保証してない ※ 最低でもiso-2022-jpのフォントなら日本のどのシステムにも用意できてるハズだからな ※ そうでないとテキストすら表示できない 保証されなくてもいいなら、そのままばっちいままのテキストもどきをエンコードして発信すればいいワケ 別にUTF-8、Shift_JISで送ってはいけないということはない ※ UTF-8なんかもともとエンコードされてるオクテットをさらに7bitにエンコードしてから発信することになる わかった? 結論をいえば 受信されるシステムで最終的にそのシステム用にデコードまでできて 表示まできるのなら問題ない それだったら受信したヤツも腹もたたない 表示できないメールもらったら腹立つだろ デコード未対応だったり未対応形式だったりするエロ動画をしらずにダウソしてな、 そのエロ動画が再生できないのと同じぐらいの強いイラダチを感じるハズだからな ホントなこの板は低学歴底辺知恵遅れのゴミクズしかいないのがよく分かるわ > あと「8bit のASCII」とか寝惚けたこと言ってるけどそんなこと言うやつは文字コードの話する資格ない。 > ASCII が 7bit というのは常識レベルの知識。 ID:HgLxU9xgやオレみたいにきわめて常識的なこといってるヤツが叩かれて しったかテキトーなこといってる低学歴底辺知恵遅れが幅をきかせてるのがこの板だからな。。。 >Content−Transfer−Encoding: 7bit ← コレは絶対だからな 前世紀の遺物かよw つかオマエ、mohtaみたいでキモいんだが。 MIME-Version: 1.0 MIME-Versionは1.0しかない ホントな知恵遅れがいってることは いつも意味が分からない 低学歴底辺知恵遅れの世界にプロトコルなんかないからな 低学歴底辺知恵遅れドカタは ネットワークのプログラムなんかやらないから関係ない 低学歴底辺知恵遅れと まともな人間の間では そもそも意思疎通は不可能 プロトコルがまったく違う 低学歴底辺知恵遅れ特有のプロトコルがあるらしいが オレはそのプロトコルがまったく分からない 氏名における「」や「𠮷」や「乭」 | yasuokaの日記 | スラド https://srad.jp/ ~yasuoka/journal/623209/ 読売の元の記事貼ろうと思ったらネット上には無かった……。 JIS X 0213ベースなのか? 戸籍統一文字と住基ネット文字コードの擦り合わせしたデータベースはどうするんだあれ UNICODEで恥ずかしい書き込みしてた人が 大量レスでスレ流ししてるようにしか見えない ID:yTcXDgUV 連投してID赤くしてたら誰もレス読まないぞ >>739 >ID赤くしてたら 皆が皆、専用ブラウザを使っているとは限らないのでは? unicode の議論と wchar_t の議論を混ぜるやつは素人。 unicode が普及するすっと前から wchar_t は普通に使われてる。 そりゃ使われてるかどうかで言えば使われてるだろうけど。 そんなことよりも技術的な所気にならない? 問1 16bitのwchar_tで1バイト または 3バイトのEUC-JPを 扱う場合メモリイメージはどのようになるでしょうか? 問2 32bitのwchar_tで1バイトのEUC-JPを扱う場合 メモリイメージはどのようになるでしょうか? 答えわかる?意外すぎてびっくりするよ。 16bitのwchar_tや32bitのwchar_tの使い方(エンコーディング)によるとしか >>743 そういう答えの場合は、知ってる実装を一つだけでもいいので答えてくれればいいよ >>744 コンパイラとか libc を設計する奴以外は内部実装関係ないやろ。内部実装に依存したら移植性が無くなる。 知りたかったらlibcのソース嫁。最近の linux の glibc ならUCS4に統一。昔のunixだと EUCコードそのまま16ビットでフラグ付きで入れてた。 > 昔のunixだと EUCコードそのまま16ビットでフラグ付きで入れてた。 それはwchar_tが32bitってことかな? 16bitでは不可能だよね? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる