文字コード総合スレ Part11

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
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/
2018/08/06(月) 11:54:02.02ID:wAAey1Ev
win32->win64のタイミングで変えとけばよかったのに
2018/08/06(月) 12:31:26.13ID:jTWGCXc0
もう一生UTF-16なのかな(´;ω;`)
602デフォルトの名無しさん
垢版 |
2018/08/06(月) 15:04:26.69ID:9QlJsUMm
>>600
ほんそれ
ついでにシステムロケールもUTF8はよ
2018/08/06(月) 19:56:04.82ID:RHl3d08a
必要な時にUTF32を使えればいいだけなのでそんなに深刻がらなくても大丈夫でしょ。
2018/08/06(月) 20:28:33.56ID:JHbMXthk
基本は8で臨時は32で答えが出ているよなあ
日本独自のJIS関係とかもう要らないし
2018/08/06(月) 21:09:19.10ID:J3hEGnZ9
そういえば新元号合字ってJIS X 0213とかCP932とかの系統にも入るのかな?
元号合字使ってるとこはUnicodeじゃない古いとこが多そうだからここに入れないと意味半減な気がするけど
2018/08/06(月) 21:18:55.92ID:RHl3d08a
印刷に使うワープロソフトはすべてunicode対応しているから大丈夫。
607デフォルトの名無しさん
垢版 |
2018/08/07(火) 04:59:39.09ID:OlmXtX1U
JIS改訂汁
2018/08/07(火) 17:57:38.63ID:ym2n+lOO
日本語とか東アジア言語はバイト数の面では
UTF8よりUTF16の方が有利になるのだが。
609デフォルトの名無しさん
垢版 |
2018/08/07(火) 18:02:30.52ID:pTM8y/Ns
そうでもない
2018/08/07(火) 19:58:16.46ID:4kVMfOQG
うむ
日本語などの2バイト圏でも8やで
2018/08/07(火) 21:15:40.62ID:FooseUHS
お経とかならそうかも
でも普通の日本語の文書はUTF-8で1バイトになる字がわりと使われてるよね
改行もバカにならない
2018/08/07(火) 21:38:24.37ID:d4J1pA0H
中国語ならUTF-16のほうが有利?
2018/08/07(火) 23:58:44.52ID:r6gcb8rL
エディタとかUTF-32に対応してないのが多いよな。
まあ、無駄が多いからな。最上位の1バイトは必ず0x00になるから。
2018/08/08(水) 00:28:20.77ID:rL4NvpAX
UTF-16は廃止してUTF-20を策定すべき
2018/08/08(水) 00:34:22.04ID:tqYMmDjs
UTF-24じゃないの
2018/08/08(水) 01:56:39.24ID:00np0Lo5
ランダムアクセスが一番早い文字コードはどれよ
2018/08/08(水) 02:09:19.94ID:kZ99Qrjg
余ってる場所を余計なことに使う奴が絶対出てきて、
それを根絶するのに凄い辛い思いをするからヤメレ。
2018/08/08(水) 04:24:19.86ID:tqYMmDjs
もうこれ人類的に根絶できないんだろうね
一生これなんだろうね
619デフォルトの名無しさん
垢版 |
2018/08/08(水) 04:37:42.38ID:XhOfYtOw
>>615
utf8でいいよ
2018/08/08(水) 08:35:31.20ID:/x3y+p/o
そういえば、utf9というのもあったな。36ビットコンピュータに最適だとか。
2018/08/08(水) 14:09:08.17ID:QoUOzAqb
UTF-7と言う変態も
622デフォルトの名無しさん
垢版 |
2018/08/08(水) 16:40:51.17ID:QemCzjVB
Base64
2018/08/08(水) 18:02:57.82ID:SZpNbR5J
UTF-24を策定するべきだな。
全ての文字を24ビット(3バイト)で表す。
UTF-32の0x00で固定な最上位バイトを省くというので。
BMP外の文字だらけの文章には有利になるだろう。
624デフォルトの名無しさん
垢版 |
2018/08/08(水) 22:53:07.77ID:jNIJWXgx
>>623
だな、固定長はUTF-24、可変長はUTF-8でいいだろう
2018/08/08(水) 23:15:02.85ID:oJrY5QK4
UTF16はいらないとかUTF24がよいとか、変な書き込みする人、同一人物?
CPUのレジスタは32bitまたは64bitなので、1バイトをコピーするのも4バイトをコピーするのも時間コストは同じだよ。
2018/08/08(水) 23:48:28.49ID:EMFNgHK2
1バイトと4バイトとかミクロの性能比較なんか殆ど意味無い
2018/08/08(水) 23:49:21.32ID:SCPSjdZ4
固定長だなんて幻想をまだ見てるの?
2018/08/08(水) 23:50:49.11ID:7IOaw32y
固定長の方が高速で便利ですやん
2018/08/08(水) 23:57:42.55ID:oJrY5QK4
>>626
大ありですよ。

>>627
固定長の方が条件分岐が減るので処理速度が高く、プログラミングもしやすい。
630デフォルトの名無しさん
垢版 |
2018/08/09(木) 01:13:33.46ID:BF3jeRnZ
>>626
ファイルサイズがでかくなればそれだけ処理をする回数が増えるからダイレクトに効いてくる。
631デフォルトの名無しさん
垢版 |
2018/08/09(木) 01:20:56.02ID:BtZU6oOJ
CPUひとつあたりの処理速度は10年前とあまり変わってないけど、搭載できるメモリの量は劇的に増えた。
内部実装がUTF32になって文字列リソースが2〜4倍になったとしても利用できるメモリはそれ以上に激増しているのでまったく問題なし。
むしろUTF16やUTF32のほうが頭打ちのCPUにも優しい、ということがわかるはず。
2018/08/09(木) 09:34:00.04ID:Z95VMlij
16は全然優しくない
24もアライメントを考えると優しくない
2018/08/09(木) 10:29:52.60ID:4BSOUm1q
よし128だ。
634デフォルトの名無しさん
垢版 |
2018/08/09(木) 10:44:02.84ID:NXkdt6vr
>>625
放っとけば居なくなるのに
2018/08/09(木) 11:03:48.44ID:Z95VMlij
>>633
合成やセレクタを撤廃できるのなら128でいいよ
636デフォルトの名無しさん
垢版 |
2018/08/09(木) 11:05:58.21ID:OVYf9YNp
UNCODEv6
2018/08/10(金) 22:27:21.22ID:GO9W3NJ8
UTF24とかメモリアクセス効率悪すぎるだろ。アライン考えろ。
情報交換用文字コードはエンディアンに依存しないUTF8。
内部用の文字コードはアクセス効率が良いUTF32。
貧乏人専用のUTF16。
それぞれ存在理由があるんだよ。
638デフォルトの名無しさん
垢版 |
2018/08/10(金) 23:01:06.31ID:d4sNno4d
Windowsの場合、プログラムを何も改修することなくUTF16でサロゲートペアの絵文字を使えているでしょ。
もちろん、文字フォントを描画するAPI、つまりマイクロソフトの中の人が頑張っているからだが。
2018/08/10(金) 23:24:23.95ID:d4sNno4d
まぁ、Windowsプログラムで、動的に絵文字の肌色・髪色・性別などを変えようと思ったら、
UTF16のサロゲート処理を自分で行う必要があるけどね。
2018/08/11(土) 00:03:26.88ID:Zp5HrM4G
>>637
24が駄目なら8はもっと駄目なんでないの?
2018/08/11(土) 10:22:26.41ID:/GDyR5Hs
だからUTF8は内部利用じゃなくて情報交換用なんだろ。
2018/08/11(土) 10:45:32.80ID:0HQvSoaX
SJISと取り決めてあるテキストデータにUTF8をぶっこんできた取引先があって
翌朝からの日本社会に大混乱を引き起こしかねない危機に晒された経験がある
UTF8滅ぶべしと俺は本気で思っている
2018/08/11(土) 10:58:00.76ID:kug6FRsz
エンコーディングは関係ないだろ。
決めごとを守れないその取引先と異常データを突っ込まれただけで混乱しちゃうプログラムの問題。
2018/08/11(土) 11:30:16.03ID:dFDFw6X4
何年か前に、地域の緊急速報のテストメールか何かに
エンコーディングを混在させて文字化けを地域住民に送って混乱させたのあったな
メールテンプレートのエンコーディングと、流し込む本文で混在させちゃったみたいな
645デフォルトの名無しさん
垢版 |
2018/08/11(土) 11:51:55.94ID:AWnFhpjF
ないしほてし活復を語本日く書に左らか右どけい良もでき書横
2018/08/11(土) 13:16:33.61ID:uKNQsIii
>>644
去年だぞ
2018/08/11(土) 15:11:54.76ID:uEbn4tPy
546<<
ケォヴわいくにみ読
2018/08/11(土) 15:47:35.74ID:UCIDniLJ
中東の言語は確か右からだったよな
やろうと思えば簡単そう
649デフォルトの名無しさん
垢版 |
2018/08/11(土) 15:56:48.16ID:A8A80vkf
TeXって右から書くのにも対応してるっけ
650デフォルトの名無しさん
垢版 |
2018/08/11(土) 18:33:53.99ID:Yf3CWOMt
sjisの〜とcp932の〜の違いって何?
〜を入力して検索すると、sjisのほうはヒットしないんよね
651デフォルトの名無しさん
垢版 |
2018/08/11(土) 19:10:44.45ID:HdyPScyr
>>650
「入力して検索する」
どうやって入力して何を検索するのか他人に分かるように書いたらどうか
入力側がUNICODEで変換不能とかじゃない
2018/08/12(日) 00:02:17.72ID:ZUsL8uZg
>649

ArabTeX を使えば出来ます
2018/08/12(日) 14:13:27.50ID:pjLEMieq
Draft Emoji Candidates
http://unicode.org/emoji/future/emoji-candidates.html
2018/08/12(日) 14:20:12.48ID:JT/5kO4h
絵文字がんがん増えてるけど、ぱっと見で見分けが付かない微妙なの多いよなぁ
655デフォルトの名無しさん
垢版 |
2018/08/12(日) 14:26:24.04ID:rtSL/abo
馬鹿は同じ過ちを繰り返す
2018/08/12(日) 14:35:29.88ID:x/eO0jlG
そのうち洗練されて象形文字になって、やがて漢字に…あれ?
2018/08/13(月) 14:33:07.24ID:1RU0E1KE
この際1byteを32bitか64bitにしたらどうよ
1byteが8bitになったのはアルファベットや数字が固定長で表せて
2^nbitで処理しやすかったからなんだろうけど
1byteが32bitか64bitになればエンディアンの問題もなくなって分かりやすくなる
658デフォルトの名無しさん
垢版 |
2018/08/13(月) 14:58:06.25ID:obMX332h
そうなんか?
16新数で2桁でちょうどいいからだと思ってた
659デフォルトの名無しさん
垢版 |
2018/08/13(月) 14:59:26.97ID:obMX332h
あと 8bit を 1byte というけど
4bit のことをなんていうの?
660デフォルトの名無しさん
垢版 |
2018/08/13(月) 15:02:02.90ID:L5U4GWSY
>>657
8bitや16bitのCPUはどうすんの?
2018/08/13(月) 15:15:08.87ID:fDt52YY1
>>657

32bitでも、64bitでも、好きな長さを「word」と呼べばいい。
これで、エンディアンの問題もなくなって分かりやすくなるんだよな。
2018/08/13(月) 15:19:57.39ID:mSGjli4I
>>659
ニブル - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%96%E3%83%AB

> ニブルは4ビットのことである。
663デフォルトの名無しさん
垢版 |
2018/08/13(月) 16:04:07.52ID:obMX332h
Thx!
DNCL
2018/08/14(火) 02:11:13.81ID:uURIoDLa
無理。各コンピュータ内部なら好きなビッド数にすれば良いけど、インターネットのほぼ全ての規格はオクテットが基準になってる。
インターネット全部作り直すくらいやらないと今更変更できない。
665デフォルトの名無しさん
垢版 |
2018/08/14(火) 09:43:35.42ID:UwXfpacN
byteとoctetを区別すればいいだろ
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 だと。
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でも同じこと
2018/08/14(火) 14:30:35.75ID:iWXezx4W
UTF-8はエンディアンの問題が無いのが良い
2018/08/14(火) 15:00:48.27ID:YfFk5ERN
8も16も大して変わらないと言えばそうだけど、種類が少ないに越したことはないし
どっちかひとつ残すならやっぱり8なので、16には退場願いたいね
2018/08/14(火) 15:32:16.19ID:RlMqh1JW
>>669
Windowsという重要な役目があるので無理だってわかってるだろ?
2018/08/14(火) 15:39:29.46ID:tR+8FNHO
>>667
妄想は要らん
asciiとの互換性とosの改修は関係ない
16bitに収まったとしたらとか ifを言い出したらきりがない
2018/08/14(火) 15:47:44.20ID:gsqu+3TO
>>670
昔からMSは独自文字コードが大好きだからUNICODEからUTF-16が無くなっても問題ない
2018/08/14(火) 16:47:25.95ID:RlMqh1JW
>>671
> asciiとの互換性とosの改修は関係ない

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

UTF-8でなければprintfなどの基本的でよく使われる関数
全てをUnicode対応に改修しなければならなかった。
もしくは捨て去さるかだ
2018/08/14(火) 16:48:00.48ID:RlMqh1JW
>>672
昔からUnicode対応なんですがーw
2018/08/14(火) 16:54:07.60ID:/zOgrF0V
UTF-16やUTF-32も1文字の中に\0が含まれているわけじゃないがな。
676デフォルトの名無しさん
垢版 |
2018/08/14(火) 17:16:53.37ID:X3bC8nHW
含まれるやろ
677デフォルトの名無しさん
垢版 |
2018/08/14(火) 17:17:26.99ID:X3bC8nHW
L'\0' は含まれないが '\0' は含まれる
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とみなすので途中で切れるか全く表示されなくなる
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が含まれるのだ
2018/08/14(火) 17:37:04.18ID:YfFk5ERN
まあWindowsみたいにcharはロケール依存のままでwchar_tだけUnicodeという構成もあるので
UnixのUnicode対応にUTF-8が必須だったかというとわからんけどなー
2018/08/14(火) 19:46:09.12ID:+lmSJTba
>>680
え? Unixもwchar_tはUnicodeだけど?
2018/08/14(火) 20:25:18.83ID:cWcfj41B
正確には、既存のコードの多くは wchar_t が使われて無くて、
その対応が大変だっていう話

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

但し、char と混在させるのは単なる誤り。printf に使うと途中で切れるとかいうのは使う側のミス
2018/08/15(水) 05:49:51.06ID:fSWxnCwv
wchar_tやったときない
2018/08/15(水) 11:55:41.55ID:RPpo5aFa
>>687
printfで途切れる云々は仮にLANG=C.UTF-16みたいなロケールがあったとしての話だろ?
isdigit等も実装できないし、規格上できないようになってるとは思うけど
2018/08/15(水) 13:30:59.38ID:/R99sNfj
>>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と違って確率的には低いだろうけど
2018/08/15(水) 15:55:17.05ID:fksu3zh2
>>662
シュメール文明の神アヌンナキたちの故郷の惑星のことかと思った
692デフォルトの名無しさん
垢版 |
2018/08/15(水) 16:15:54.08ID:Y4UT7naw
乳首の甘噛み
2018/08/15(水) 16:25:48.18ID:fSWxnCwv
>>690
> 似たような理由EUC-JPは対応できたけど、SJISは対応できなかった

kwsk
2018/08/15(水) 16:43:22.85ID:BHOopni+
>>693
だからダメ文字だって

http://ash.jp/code/code.htm
> また、2バイト文字の中に"\"(0x5C)を含むデータが存在するため、文字列がメタ処理されてしまい、文字化けする可能性があります。

LinuxやUnixに限った話ではないけど、
文字を1バイトずつ処理するようなもの(つまりcharポインタ)は
ASCIIと互換性がないと不具合の原因になる

だからSJISやUTF-16やUTF-32はLinuxやUnixで
ネイティブに処理するのは苦手なんだ
2018/08/15(水) 17:20:00.89ID:/SQznhgr
中途半端な多encoding対応で不具合が出たという話。要はバグ。
2018/08/15(水) 22:23:06.07ID:URD+Lz/b
アホか、アホしか居ないか?
それともわざとボケてんのか?
なんで wchar_t の話と printf の話を一緒に語ってるんだ?

wprintf 🤔
2018/08/16(木) 02:36:38.02ID:agaekNdO
>>696
だからprintfで実装されているものをwprintfに修正するのが大変だって話
またwopenfなどワイド文字対応の関数が存在しない場合も存在する。

それに単純に置き換えてしまうと、今度はASCII環境で動かなくなってしまう
なぜならwchar_tは16bit または 32bitという固定サイズなので
8bitのASCIIは扱えない(当然可変長バイトのUTF-8もwchar_tでは扱えない)

だからwchart_tというものが作られたけど、Linux/Unixはそれを使用して
ワイド文字列対応にするのは現実的に不可能と判断し、
printfで扱えるASCII互換のUTF-8を使うことにした
2018/08/16(木) 02:59:55.06ID:HgLxU9xg
ダウト
wchar_t で普通に ASCII も使える。当たり前。i18n でプログラム組んだことないだろ?
UNIX 系で utf8 が好まれる最大の理由は内部コードとかじゃなくて、ファイル名。
ファイル名に直接 0x00 が入れられないので。あとはネットワークまわり。
2018/08/16(木) 03:50:25.48ID:agaekNdO
そりゃ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を扱えるライブラリを使えば良い
2018/08/16(木) 06:01:32.95ID:agaekNdO
訂正

そのためUTF-8のファイルを読み込むときには、wchar_tに変換しながら読み込まなければいけない。
例えば8bitのASCIIコードであれば残りの8bitを\x00で埋めた16bitのUTF-16に変換するとかしてだ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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