文字コード総合スレ part15

1デフォルトの名無しさん
垢版 |
2024/08/17(土) 11:18:00.01ID:VHa7+i59
文字コードについて語り合うスレです
2024/11/21(木) 14:20:22.35ID:GU8mH0bt
>>99
キミの言う「完璧」とは一体...
2024/11/21(木) 15:46:00.53ID:/Qk0W5ej
>>98
>そんなこと言いだしたら APFS も NTFS も単にバイト列を記録してるのに過ぎない。
いいえ
102デフォルトの名無しさん
垢版 |
2024/12/01(日) 10:32:32.38ID:RvSn0UL0
UTF8を推しているのは形を変えたASCII信者の老害。
2024/12/01(日) 11:15:01.77ID:iESkoZBr
刷新できていない古いシステムを除くと
文字コードはユニコードになったね

エンコーディングはネット上がUTF8なので
それをそのまま扱うのが一般的となったね
2024/12/01(日) 12:39:57.84ID:8fzBRjbp
UTF-8 より完璧な文字コードって何だい?
ASCII と SJIS と UTF-8 はいいねしたい
2024/12/01(日) 20:40:24.45ID:NnL6xx/e
なんか色々ごっちゃだな
2024/12/02(月) 03:35:11.02ID:okRPdXGy
元のユニコードがクソだからなあ
結局どうにもならなくなって異体字セレクタとか出てくるし
107デフォルトの名無しさん
垢版 |
2024/12/02(月) 13:49:05.08ID:Zd1R379W
ishの出力ってSJISが標準?
utf-8板のish欲しいと思ったけど
-Dutf8付けてコンパイルしても結局SJIS出力だった
2024/12/02(月) 14:10:00.90ID:n2j6TE+S
バイトデータで出力してるだけでエンコーディング関係ないような
UTF-8対応してもバイト単位でみたら7ビットしか情報持てないから損
効率気にしないならコード変換したらいい
半角カナが3バイトになるけどエラー訂正なんかは使える
2024/12/03(火) 12:52:43.59ID:DZc+/1dr
たまたまSJISでデコードしたら人間に読める(かもしれない)ってだけで
只のバイナリデータだよね
2024/12/04(水) 23:36:37.56ID:9B20CEFA
SJISとして不正なバイト列は含まれないはず
2024/12/05(木) 16:18:11.64ID:riH9D2sC
ファイル名がユニコードだと、
例えば2つのファイル名が同一かどうかの判定は、2つのユニコード列が同一かどうかの
判定をしなくてはならない。この場合の同一とはなんだろう。めんどくさい
2024/12/05(木) 16:59:22.16ID:jrS77sb5
>>111
「ユニコード列」みたいな曖昧な用語で考えると曖昧な結果にしかならなんわな
2024/12/05(木) 17:16:36.01ID:jrS77sb5
「ファイル名」という用語に限ってもOSごとに異なる意味をもち、「バイト列/コードポイント表現」(Linux/Windows)と「 unicode 正規化表現」(MacOS)のどっちのやり方もあるし unicode の正規化には複数の種類がある
114デフォルトの名無しさん
垢版 |
2024/12/05(木) 19:21:14.57ID:f+d6ZP2R
>>103
ネットはJISもあるから、そう簡単な話ではない。

EメールだとまだJISが主流。
115デフォルトの名無しさん
垢版 |
2024/12/05(木) 19:22:28.03ID:f+d6ZP2R
>>113
Macのせいで記号や改行コードの解釈がめちゃくちゃになった。
2024/12/05(木) 22:25:20.82ID:Kc+yIq6Q
>>111はあえて雑に書いてあるんだが(めんどくさいからw)
>>113は「曖昧じゃない」んだ?
2024/12/05(木) 23:11:23.50ID:+y5lu+gF
見苦しいぞ
118デフォルトの名無しさん
垢版 |
2024/12/06(金) 10:53:27.12ID:zw4qy2EX
ハンカクカタカナ.txtと
ハンカクカタカナ.txtは
区別されると困るか区別して欲しいかは個人の好みだな
2024/12/06(金) 11:15:10.72ID:kzR0LSsc
>>111,118
主観と好みの問題だから、現状がそれを孕んでいるかどうか心配ならNKFCで突合チェックしたら良いだけかな
2024/12/06(金) 13:01:51.55ID:tlsLperd
>>118
自分はまったく別物だろうという考えだが、逆にそれを同じと思う人がいるというのに驚きだ
2024/12/06(金) 14:57:12.37ID:PqgirqmV
MacOS/iOS だと OS 的にファイル名はNFD強制なのでその2つ区別できないのが普通だな
Macユーザーは「半角カナはファイル名には使えない」という言い方してることが多いけど
2024/12/06(金) 15:08:33.92ID:teqNcVuG
Windowsは大文字小文字の区別を付けないのがデフォルトなんだけど、
WSL内からアクセスする兼ね合いで区別設定できる(fsutil)

>>121
Macにも同様の理由でNFD強制解除の設定があるのでは?
2024/12/06(金) 17:09:11.54ID:PqgirqmV
>>122
強制解除とかはなかったと思うが古い HFS+ と違って新しい APFS では論理的には書き込み可能なはず
一方でライブラリで、ファイルオープンする時にファイル名が強制的にNFD変換されるので通常のプログラムでは全部NFDになるのは避けられない
2024/12/06(金) 20:10:41.64ID:77CvoLMD
Macが一番遅れているのは意外だな

> Mac で NAS (SMB) のファイルが見えない問題を Unicode 正規化方式を変えて解決
> Unicode 正規化方式として NFD を採用しているのは Mac なのに,SMB (NAS) を介してみると当の Mac だけがそういったファイルを認識できない(ことがある)というのはなんとも皮肉な結果ですね...。
2024/12/06(金) 21:07:04.96ID:PqgirqmV
>>124
Mac はローカルファイルは NFD (っぽい独自仕様)で正規化されてる前提で、リモートのSMBの先は NFC (っぽい独自仕様)で正規化されている前提で動作するという謎仕様なので
Lunux は基本的に正規化されずに全部別の文字扱いで unicode の全文字が使える
Windows も基本的には正規化を前提にしていないが独自仕様の使えない文字がある
2024/12/06(金) 21:22:50.16ID:XSDLieo6
わかりやすいようにたとえで説明するとさ、
オマエんちに人を招待したら、土足のまま上がってきた
オマエはイラっとするんじゃね? はいオマエ遅れてる〜
2024/12/06(金) 21:35:56.15ID:PqgirqmV
服装カジュアルな場所でも常にスーツ着てきてスーツ着てないやつは家族だろうと友人だろうと全員無視するのが Mac 仕草
その上、自宅用と訪問用に別の種類のスーツを使い分けてて同じ種類のスーツ着てないと相手してくれない
2024/12/07(土) 10:53:50.76ID:+zec5U9G
UnicodeはUnicodeで様々な言語の様々な表現ができるようにするなかで一意性についても
用途や目的によって方法は異なるとしているわけで、そもそもファイルをファイル名で特定するという
昔ながらのやり方との齟齬が出てきているのかもね。
使うなら使うでファイルシステムに用いる正規化ルールなどを定めなければならないんだろう。
2024/12/07(土) 11:21:31.79ID:RCmjilK5
同一性やコロケーション問題として
path-win-ntfs、path-linux-ext4のようにunicodeでpath-localeを定めてicu実装されたら良いのにと思った事はあったけど、
それで他の方法が駆逐されるわけじゃなく新たなバリエーションを増やすだけだから、今は余計な事するなと思うよ
2024/12/07(土) 11:21:45.13ID:prVW7qhX
>>128
ファイル名はOS的には単なる識別子なのでバイト列一致で良い
それを文字コードと絡めて正規化しようとするのがそもそもの間違い
バイト列をどのように解釈するかは別のレイヤーの問題
2024/12/07(土) 11:44:07.08ID:3wlpERVS
FSとしてならそれでいい
OSをどの層までとするかでも変わってくるけど
マウント時に変換かけてOS間の相互運用気にしてほしい
ネットワーク透過考えるとパスはURIで扱いたいしね
2024/12/07(土) 13:08:36.00ID:prVW7qhX
>>131
基本的にはアプリ側のライブラリ層でやるべきこと
OS標準ライブラリかユーザ追加ライブラリかはOSの思想によるし Linux とかだとOS標準ライブラリという考え方は縁遠いけど
マウントの時にファイルシステムで文字コード変換するのも否定しないけど、あくまで代替手段なので、固定ではなくオプションや設定で利用者で任意に変更できるべきもの
133デフォルトの名無しさん
垢版 |
2024/12/07(土) 14:01:25.11ID:8ekNK8XT
>他の方法が駆逐されるわけじゃなく新たなバリエーションを増やすだけ

ほんそれ
2024/12/07(土) 14:17:40.72ID:Zwl6oBBL
まずはMacを駆逐しよう
2024/12/07(土) 16:00:13.39ID:2Ddhf3xH
Mac で日本語を駆逐でいいんじゃね?
2024/12/07(土) 21:42:37.76ID:1sWZyE4C
ファイル名にはASCIIにある文字しか使わないようにすれば解決
2024/12/07(土) 21:44:45.68ID:prVW7qhX
>>136
ASCII のバックスラッシュが円記号になってしまう OS がるらしい
2024/12/08(日) 03:07:43.02ID:h9KuPnHR
>>136
じゃあまずはASCII以外でここに書き込むのやめろよ
2024/12/08(日) 04:05:29.89ID:Xxla/ZnP
>>138
ここにファイル名を書いてる人あまりいないと思うんだけど?
140デフォルトの名無しさん
垢版 |
2024/12/09(月) 11:25:01.55ID:uh4vUAM3
波ダッシュ(〜)と全角チルダ(〜)は違う文字
2024/12/09(月) 12:17:56.89ID:Ne3E3UJU
JISで全角チルダ定義したのがアレだよな
全角しか表示できない場面のためだろうけど
2024/12/09(月) 14:00:31.58ID:4HU/GnaT
>>141
JIS は全角と半角とか定義してない(定期
2024/12/09(月) 14:37:46.18ID:+G8yezOA
>>142
えー、をMSIMEで変換したら
全角チルダ(U+FF5E)でした

抑揚のある伸ばし棒はこれが正解ですか?
2024/12/09(月) 15:02:44.75ID:4HU/GnaT
>>143
知らん
MS が決めたことは MS に聞け
全角とか半角とか関係ない
2024/12/09(月) 17:46:32.24ID:bX1qj24S
この板には表層的にMSを持ち出すだけで思考停止する若干一名がいるね
2024/12/09(月) 18:34:12.95ID:4HU/GnaT
>>145
シフトJISの「波ダーシ」を unicode の「全角チルダ」にマッピングする CP932 を規定したのはマイクロソフト
マイクロソフト以外の Linux とか MacOS とかその他の各社OSではそうなっていない

マイクロソフトが何でこんなマッピングにしたのかは専門家でも分かんない謎
unicode がまだドラフトの時代にあわてて作業したのでミスっただけの可能性も指摘されてるが、一度決めたものは互換性のために変えられないのだろう点は理解できる
2024/12/09(月) 23:51:59.27ID:TvtcjS7H
マイクロソフト憎しにも程がある
デマだめ絶対
2024/12/13(金) 01:50:01.54ID:XDI5kMlm
マイクロソフトの場合親の敵の可能性があるから俺は許すね
気の済むまでじゃんじゃんやっといてくれ
2024/12/13(金) 02:14:20.18ID:OiDxg/7M
unicode 規格が最初に作られた時サイトに参考情報として JIS と unicode のマッピング表が置いてあった
Linux も Mac も商用Unixもこの表に従ってJISの波ダーシを unicode の wave dash にマッピングした。さらに JISの規格書にもこのマッピングで記載された
ただ Microsoft 1社だけは JIS の波ダーシを unicode の fullwidth tilde にマッピングした

こんなんマイクロソフトの中の人以外に理由が分かるわけねーだろ
2024/12/13(金) 11:09:50.07ID:ncXjn+FF
初期のUnicode仕様書の文字の形がおかしかったのがそもそもの原因なんだけどね

いまの仕様書では、〜(U+301C、波ダッシュ)は、~(U+FF5E、全角チルダ)と同じ字形だけど、
古いものは、上下反転した存在しない文字の形だったので、どちらに合わせるかを決める時点で、
MSは形の相似した全角チルダのU+FF5Eを、その他は仕様どおりの波ダッシュのU+301Cを割り当てた
更にMacは仕様書を無視して字形を変更し、現在の仕様書と同じようにU+301Cに本来の波ダッシュの形を割り当てた

ただ、上下反転した字形は、縦書きの際の全角チルダ(左右の順)文字を横書きにしたために紛れ込んだとも言われているので、
仕様書制定の段階で縦書きのある日本語を理解した人が加わっていなかったのだろうな

まぁ、仕様書の字形がおかしかったことがそもそもの原因ではあるけれど、
これの対応を話し合いをすることなく各社で独自に行なってしまったというのが一番大きいな
結局、日本語が軽んじられていたんだろうけど、なんとも間抜けな話
2024/12/13(金) 11:39:54.50ID:OiDxg/7M
>>150
仕様書も文字の形がおかしかったはネットの素人が勝手に推測した迷信、文字形は規定していない
文字コード的にはフォントで変わる文字の形は意味がない

unicode の wave dash は JIS 第一水準の波ダージなどに対応する文字として準備された
unicode の互換領域の fullwidth tilde は EUC-JP とかで使用されいたJIS補助漢字のチルダをマッピングするために準備された
EUC-JP では ASCII の1バイト文字のチルダと補助漢字の2倍と文字のチルダに両方が使われていたので互換領域が必要だった
2025/01/11(土) 13:26:51.55ID:ftPdDy1W
なんか文字コード絡みでWindowsに特大級のセキュリティホールが見つかったぽい
https://blog.orange.tw/posts/2025-01-worstfit-unveiling-hidden-transformers-in-windows-ansi/
153デフォルトの名無しさん
垢版 |
2025/01/11(土) 13:36:00.86ID:ftPdDy1W
CP65001で緩和可能ってことであってるよね?

超ヤバげなんでageるよ
2025/01/11(土) 13:52:24.87ID:wkEhpAnW
>>153
あってる
MSYS2を使ってれば2,3ヶ月前には対策の副作用があったから知ってたよ
メディアはもっとこれを大きく報じてユーザー環境にもUTF8ロケールが広まって欲しい
2025/01/11(土) 15:04:27.58ID:mk8LdH4O
やべーやつだこれ
終わったな...
2025/01/11(土) 15:07:44.39ID:MN266Dik
とうとう Windows の Best-Fit-Conversion が槍玉にあげられたか
これって多数の個別アプリの問題に矮小化されてきたけどどう考えてもOSの設計ミスにしかみえない
2025/01/11(土) 16:08:55.10ID:IZON3iKr
件のBestFit機能のせいで、
windowsバッチでフルパスが半角スペースなし全角スペースありだと、
どのようにクォーティングをしようともまともに動かなくなったわけか
2025/01/11(土) 16:17:43.05ID:PjVvqmiz
システム設定でUTF8にするとメモ帳でSJISテキストファイルが文字化けする訳だけど
この特需で伸ばす代替エディタは何か?
2025/01/11(土) 16:20:20.66ID:PjVvqmiz
場合によっては情シスがSJISテキストファイルリストアップツールを用意する事になりそう
2025/01/11(土) 16:29:41.49ID:IZON3iKr
UTF-8に設定すると、JaneStyleは今度こそ本当に使えなくなるんだよな
2025/01/11(土) 16:37:08.97ID:8GlegYBS
ファイル名に禁則文字を増やしても避けられないのだろうか?
2025/01/11(土) 16:50:18.36ID:SJ4Pziuh
これを機に932以外では文字化けするレガシーアプリは駆逐されれば良い
2025/01/11(土) 17:11:19.10ID:MN266Dik
>>161
ファイル名の禁則レベルでは無理
Unicode の一部の文字がバックスラッシュとか空白とかクォートとかの区切り文字や特殊処理する文字に化けるので、これを利用して入力を誤魔化せるという技
どう化けるかはコードページ次第

全部のアプリがユニコード対応になるか Windows が BestFit やめない限りは多くのアプリで同様の問題が量産される(オープンソース系のアプリはこれはOSの仕様のせいでアプリのバグじゃないので直すつもりはないとか言ってる)

UTF-8だとBestFit使われないので Windows 12 とかで SJIS とか Win-1521 とか捨ててデフォルトが UTF-8 になれば解決するけど
2025/01/11(土) 17:17:54.37ID:IZON3iKr
システムをUTF-8に設定した上で、
CP932なアプリについて、個別のマニフェストの"activeCodePage"を"CP932"することで使えるようにならないんだろうか?
2025/01/11(土) 17:23:40.51ID:MN266Dik
>>164
今のところできないし、できたとしてもその cp932 に設定したプログラムで BestFit による抜け穴が使われるリスクがある
2025/01/11(土) 17:41:24.43ID:8GlegYBS
ファイル名に英数字以外禁止したら何とかなりそうな気はした
2025/01/11(土) 17:49:38.65ID:MN266Dik
>>166
ファイル名だけじゃないから
コマンドのオプションスイッチとか、URL とか、環境変数とか、レジストリとか、とにかくプログラムの入力全部
2025/01/11(土) 22:53:43.82ID:ftPdDy1W
Windows全然詳しくないんだけど、Windows APIのANSI APIとUnicode APIとの違いって
標準Cライブラリの文字出力で言えばprintfとwprintfとの違いってことだよね?

世の中のOSSのほとんどはwprintf等のワイド文字関数なんて使っていないんだから
OSSをWindowsで動かした場合ほぼ全部WorstFitの影響を受けることになるはず

今後基本的にワイド文字関数で書くべきってなると、Hello Worldは

#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main(int argc, char **argv)
{
setlocale(LC_ALL, "");
wprintf(L"こんにちは世界\n");
}

こうすべきってこと?
2025/01/11(土) 23:28:05.92ID:ftPdDy1W
あ、
int main(int argc, char **argv)
エントリーポイントの時点で引数がワイド文字じゃないから脆弱性の影響を受ける可能性があるのか
wmainがあるのはそういう理由なのね
2025/01/12(日) 08:20:59.76ID:xo4UH4ro
MS的には「いまだにワイド文字列使ってないアプリが悪い」なんだよな
2025/01/12(日) 11:43:06.44ID:2Lg/ICMd
>>170
最近は ANSI は UTF-8 に固定しろとか言い出してる
2025/01/12(日) 12:45:56.54ID:/g6mpPgl
>>160
Jane大好きマウイ君がウォームアップしてそう
ああ見えてフッ軽だから今度はflutterで作ったりしてなw
173デフォルトの名無しさん
垢版 |
2025/01/13(月) 13:47:41.46ID:g4/CTboD
UTF-8に一本化されるなら嬉しいな
2025/01/13(月) 21:19:29.06ID:5zeCvv1K
Windows アプリで UTF-8 コード ページを使用する
https://learn.microsoft.com/ja-jp/windows/apps/design/globalizing/use-utf8-code-page
2025/01/13(月) 23:50:34.22ID:ux79df1f
初めから文字列はUTF-8と言語仕様&標準ライブラリで決めてあるRustが楽でいいね
もちろん必要ならUTF-8以外も読み書き可
176デフォルトの名無しさん
垢版 |
2025/01/17(金) 17:07:09.01ID:GO6/DX25
pythonも楽ちんちん
2025/01/18(土) 03:52:04.02ID:CaguG0TX
RustがWindowsでファイル名を扱う時のWTF-8、あれ脆弱性の元な気がするんだよな…
WTF-8状態でサロゲートペアの前後を結合してしまうとUTF-8のとはまた別の冗長表現が導入されてしまう
2025/01/18(土) 09:40:44.96ID:ryxfYm1H
>>177
気のせいじゃない?
規格どおり実装されてればUTF-8にサロゲートなんて概念は存在しない
最短表記のみが正式なので冗長性はないよ
2025/01/18(土) 10:15:43.69ID:CaguG0TX
>>178
UTF-8では違反なサロゲートの片方だけを許すのがWTF-8なので
正常なサロゲートペアをUTF-8に変換したときの4〜6バイト表現に対して
WTF-8ではペアの片割れを別々に変換して結合した3バイトのサロゲート片☓2な別表現が存在できてしまうでしょ
これらはUTF-16に戻したら同じ文字列になってしまうので
WTF-8で比較等の処理をしてUTF-16に戻すと脆弱性になっちゃう
2025/01/18(土) 10:40:31.12ID:ryxfYm1H
>>179
色々間違えてる
UTF-8では片側だろうと両方だろうとサロゲート領域のコードは許されてない。あったらUTF-8じゃない
サロゲート導入前の古いUTF-8規格を参照してるアホがいるだけ
UTF-8は最大長で1文字4バイト、それ以上長いのは今のUTF-8では許されない
ましてWTF-8とか名前変えてもユニコード規格の対象外、UTF-8ではない
2025/01/18(土) 10:44:27.05ID:CaguG0TX
>>180
最初っからWTF-8って言ってるじゃん
2025/01/18(土) 10:49:44.07ID:CaguG0TX
Windowsのファイルシステムでは文字コードとしては不正なバイト列がファイル名として存在できる
それを8バイト文字列で無理やり扱うためRustではWTF-8という本来エラーになる表現も許容した規格違反UTF-8を使っている
OK?
2025/01/18(土) 11:09:46.05ID:ryxfYm1H
だから WTF-8 は UTF-8 とは違う
別物なんだから混同しなければ脆弱性にはならない
2025/01/18(土) 11:15:32.70ID:CaguG0TX
Rustではファイル名をWTF-8で扱うけどWTF-8で文字列処理すると危なくね?ってそれだけの話だよ
UTF-8の話と混同して絡んできたのはあんたじゃね
185デフォルトの名無しさん
垢版 |
2025/01/18(土) 11:27:52.60ID:7Jaib8zo
m1Hは馬鹿ちんちん
2025/01/18(土) 11:33:32.09ID:ryxfYm1H
WTF-8 の文字列を UTF-8 の比較関数とかで処理しようとしてもうまくいかない → 当たり前
これは脆弱性ではないし、冗長性も関係ない
ここまでは理解できてるんだよな?

WTF-8 が別規格なんだからそれ専用の処理コードが必要ってだけだろ
UTF-8ではないので混同するなって話
2025/01/18(土) 11:36:02.21ID:CaguG0TX
もう自分が何書いてるかもわかってなさそう
もう一度読んで?
2025/01/18(土) 11:44:30.94ID:rGNNXTeE
横通ります

Rustではディレクトリを開いてスキャンしたら各ファイル名はWTF-8とやらのスライスなのか?
2025/01/18(土) 11:46:24.96ID:rGNNXTeE
それとLinuxのファイルシステム自体もUTF-8文字コードを外れてもOKだから、Windowsに限った話ではないかと
LTF-8もあるのか?
2025/01/18(土) 12:03:49.92ID:CaguG0TX
>>188-189
型としてはOsStringとしてラップされてて、中身を取り出したらWindowsではWTF-8
不正な文字コードが入りうるのはどのOSでも同じだけどバイト列そのままな他OSと異なりWindowsだとUTF-16との変換も挟まって危なそうだなあって

(ちなmacOSやあとBSDのzfsなんかだと不正な文字コードは最初から入らないらしい?)
191188-189
垢版 |
2025/01/18(土) 12:30:08.19ID:ZXpOcGU5
>>190
なるほどね納得

不正な文字コードに遭遇したら処理を進めないで即座にエラーにするが良さそう

問題は処理系がちゃんと不正な文字コードを感知するかどうかだけど、
WindowsでA系APIを使っていれば(RawワイドストリングのUTF-16解釈が試みられて)
不正なパラメータエラーとかで(ディレクトリスキャン時などの)早期に発見できそうな気がする
2025/01/18(土) 12:32:48.77ID:ryxfYm1H
なんだろうな?
UTF-8: 片サロゲートも両サロゲートも不可
WTF-8: 片サロゲートのみ可、両サロゲートは不可
CESU-8: サロゲート展開必須
という区別がちゃんとついてるんだろうかという疑問、これら混ぜれば冗長だが…
単独で冗長と言われても具体性がない
2025/01/20(月) 21:45:49.79ID:fFffNKjx
勘違いしてる人がいるため正しい情報

まずRustの文字列つまりstr型とString型はvalidなUTF-8のみであることが必ず保証されている
そこには当然サロゲートもなければinvalidなUTF-8もないため問題は一切起きない
そこにWTF-8など他のものが混ざることも絶対にない
つまりどんな文字列操作をしても冗長表現のない
validなUTF-8となる安全が保証されている

つづく
2025/01/20(月) 21:46:25.68ID:fFffNKjx
次に言語とは関係ない話
validなUTF-16は必ずサロゲートがペアとして対応するが
それに対してWindowsのUTF-16パス名などあちこちの環境でinvalidなUTF-16が使われている
つまり単なる16bitコード列として任意のものが通るinvalidなUTF-16を名付けてWTF-16と呼ぶ
UTFを擬してWTFはWobbly Transformation Formatの略である
集合としてはinvalidなものを含む分だけ大きくてWTF-16⊃UTF-16となる

つづく
2025/01/20(月) 21:47:00.81ID:fFffNKjx
UTF-16⇔UTF-8は常に可逆に変換できる
前述のWTF-16に対しても同様に可逆となるものとしてWTF-8が考えられる
つまりWTF-16⇔WTF-8は常に可逆に変換できる
前述のWTF-16⊃UTF-16と同様に
WTF-8⊃UTF-8となる
このWTF-8はあくまでもWTF-16との可逆を保証するための内部表現であり外で使われることはない

つづく
2025/01/20(月) 21:48:06.23ID:fFffNKjx
このWTF-8には以下の利点がある
・WTF-16(=任意の16bit列)と可逆に1対1に変換できる
・元のWTF-16がUTF-16のみの場合は対応するWTF-8はUTF-8のみとなる
・特に元がアスキー文字のみならば対応するWTF-8は7bitアスキー文字となる

集合関係はWTF-8⊃UTF-8⊃7bitアスキー文字となる
つまり内部表現として非常に使い勝手が良いものとなっている

つづく
2025/01/20(月) 21:49:23.00ID:fFffNKjx
そしてようやく再びRustの話
Rustでは言語の外の世界とをつなぐFFI (Foreign Function Initerface)の一つとして
OS環境依存の文字列型としてOsString型とOsStr型がある
これはvalidなUTF-8文字列型であるString型とstr型にそれぞれ対応する
集合的にはOsString⊃StringとOsStr⊃strとなりinvalidなUTF-8を含む分だけ大きな集合を表す
Windows環境ではこの内部表現として前述のWTF-8が使われている

つづく
2025/01/20(月) 21:50:56.30ID:fFffNKjx
>>177 >>190
WTF-8を新たに作り出すにはvalidなUTF-8から作るか
あるいは16bit列から作るかのどちらかしか手段がない
つまり必ずWTF-16(=任意の16bit列)⇔WTF-8は1対1に対応する
したがってあなたが主張する
「別の冗長表現」は生じることはなく危険なことは絶対に起こらない
2025/01/20(月) 22:03:03.35ID:SJIxPBxD
Rustスレから出てこないで欲しいなあ
レスを投稿する