探検
文字コード総合スレ part15
1デフォルトの名無しさん
2024/08/17(土) 11:18:00.01ID:VHa7+i59 文字コードについて語り合うスレです
205デフォルトの名無しさん
2025/01/20(月) 23:00:53.63ID:fw0guZsp206デフォルトの名無しさん
2025/01/20(月) 23:18:31.29ID:uZ5HVjRv >>205
片サロゲートはユニコード的には文字コードではないので片サロゲートの結合をどう処理するかは実装依存
捨てる、未定義文字に置き変える、文字だったことにしてUTF-8変換する、なんかのセパレータを挟むとかできるかもしれない
でも一般的と思われるのは結合処理自体をエラーで失敗させる
WTF-8 にも UTF-8 にも冗長性はない、WTF-8 を UTF-8 と同じように使ってはいけないだけ、両者は別物
片サロゲートはユニコード的には文字コードではないので片サロゲートの結合をどう処理するかは実装依存
捨てる、未定義文字に置き変える、文字だったことにしてUTF-8変換する、なんかのセパレータを挟むとかできるかもしれない
でも一般的と思われるのは結合処理自体をエラーで失敗させる
WTF-8 にも UTF-8 にも冗長性はない、WTF-8 を UTF-8 と同じように使ってはいけないだけ、両者は別物
207デフォルトの名無しさん
2025/01/20(月) 23:19:38.23ID:fFffNKjx >>204
そこで問題は生じない
WTF-8の2つの文字(列)の結合は
個別にWTF-16へ変換してからWTF-16として結合してそれをWTF-8へ変換したもの
と同等になるように処理が定義されている
つまり結合後も必ずWTF-8とWTF-16は1対1に対応する
WTF-8の2つの文字(列)をAとBとし結合を+で表すと
A + B ≡ to-WTF-8(to-WTF-16(A) + to-WTF-16(B))
が常に成り立ち1対1に可逆が保証される
別の冗長表現は生じない
そこで問題は生じない
WTF-8の2つの文字(列)の結合は
個別にWTF-16へ変換してからWTF-16として結合してそれをWTF-8へ変換したもの
と同等になるように処理が定義されている
つまり結合後も必ずWTF-8とWTF-16は1対1に対応する
WTF-8の2つの文字(列)をAとBとし結合を+で表すと
A + B ≡ to-WTF-8(to-WTF-16(A) + to-WTF-16(B))
が常に成り立ち1対1に可逆が保証される
別の冗長表現は生じない
208デフォルトの名無しさん
2025/01/20(月) 23:26:06.35ID:uZ5HVjRv >>206
一応補足しておくと、エラーなどの処理するのは結合時点でなくて、それを何か使おうとしたり、他の文字コードに変換しようとした時点とすることもできる
Invalid な WTF-8 のチェックをどの時点でするかだけの問題
一応補足しておくと、エラーなどの処理するのは結合時点でなくて、それを何か使おうとしたり、他の文字コードに変換しようとした時点とすることもできる
Invalid な WTF-8 のチェックをどの時点でするかだけの問題
209デフォルトの名無しさん
2025/01/20(月) 23:27:17.08ID:fw0guZsp210デフォルトの名無しさん
2025/01/20(月) 23:35:21.19ID:fw0guZsp211デフォルトの名無しさん
2025/01/20(月) 23:45:27.35ID:fFffNKjx >>209
それは任意の16bit列に対応するWTF-8を作れるようになっているのでその場合も対応できて大丈夫
use std::os::windows::ffi::OsStringExt
OsString::from_wide(wide: &[u16])
つまりWTF-16⇔WTF-8は必ず1対1に対応するため別の冗長表現は生じず問題は起こらない
それは任意の16bit列に対応するWTF-8を作れるようになっているのでその場合も対応できて大丈夫
use std::os::windows::ffi::OsStringExt
OsString::from_wide(wide: &[u16])
つまりWTF-16⇔WTF-8は必ず1対1に対応するため別の冗長表現は生じず問題は起こらない
212デフォルトの名無しさん
2025/01/20(月) 23:52:28.98ID:fFffNKjx つまり話をまとめると
WTF-8の新規生成はUTF-8もしくはWTF-16(=任意の16bit列)からのみ生成できるため常にWTF-16と1対1に対応する
WTF-8の結合は個別にWTF-16にしてから結合してWTF-8に戻した処理と同等と定義されているため常にWTF-16と1対1に対応する
したがって問題が発生する箇所はない
WTF-8の新規生成はUTF-8もしくはWTF-16(=任意の16bit列)からのみ生成できるため常にWTF-16と1対1に対応する
WTF-8の結合は個別にWTF-16にしてから結合してWTF-8に戻した処理と同等と定義されているため常にWTF-16と1対1に対応する
したがって問題が発生する箇所はない
213デフォルトの名無しさん
2025/01/21(火) 00:05:41.71ID:HFAykEjr >>212
異論というわけじゃないが、そもそもWTF-16どうしをそのまま結合して良いかというと必ずしもそうではない
WTF-16をそのまま結合して許される条件下まらWTF-8の結合を終端でサロゲートが並んだらUTF-8変換するというのは間違ってないけど
まあどっちにしろ正しく処理すれば冗長性はない
異論というわけじゃないが、そもそもWTF-16どうしをそのまま結合して良いかというと必ずしもそうではない
WTF-16をそのまま結合して許される条件下まらWTF-8の結合を終端でサロゲートが並んだらUTF-8変換するというのは間違ってないけど
まあどっちにしろ正しく処理すれば冗長性はない
214デフォルトの名無しさん
2025/01/21(火) 00:39:07.85ID:HFAykEjr ファイル名に文字ではないゴミが含まれている → 実際に含まれているだから仕方ないOSの問題
ゴミとゴミをくっつけると文字になる → OSの問題でも文字コードの問題でもない、許すかどうかはアプリの問題
ゴミとゴミをくっつけると文字になる → OSの問題でも文字コードの問題でもない、許すかどうかはアプリの問題
215デフォルトの名無しさん
2025/01/21(火) 00:52:01.60ID:HFAykEjr ゴミの結合をして文字になることを許すと冗長性とは別のセキュリティホールになることがある
文字のフィルターとかで文字列Aにも文字列Bにも含まれてないことを確認した文字が A+B に含まれるかもしれない
これは最近に始まったことではなくて SJIS
とか EUC-JP とかでもあった問題で、セキュリティ要件ではゴミの単純な結合は許さないのがベスト・プラクティス
文字のフィルターとかで文字列Aにも文字列Bにも含まれてないことを確認した文字が A+B に含まれるかもしれない
これは最近に始まったことではなくて SJIS
とか EUC-JP とかでもあった問題で、セキュリティ要件ではゴミの単純な結合は許さないのがベスト・プラクティス
216デフォルトの名無しさん
2025/01/21(火) 01:27:51.08ID:cx2WozxM いずれにせよRustの文字列処理には何ら問題なくて
WTF-8の処理にも何ら問題ないことがわかったのだから
最初の書き込みのこの人が間違っていたな
>>177
>>RustがWindowsでファイル名を扱う時のWTF-8、あれ脆弱性の元な気がするんだよな…
WTF-8で脆弱性が引き起こされないことも今回はっきりした
あとはもし何かあるとすればWindows側の問題のみ
WTF-8の処理にも何ら問題ないことがわかったのだから
最初の書き込みのこの人が間違っていたな
>>177
>>RustがWindowsでファイル名を扱う時のWTF-8、あれ脆弱性の元な気がするんだよな…
WTF-8で脆弱性が引き起こされないことも今回はっきりした
あとはもし何かあるとすればWindows側の問題のみ
217デフォルトの名無しさん
2025/01/21(火) 06:06:40.49ID:/BTcOxxh218デフォルトの名無しさん
2025/01/21(火) 07:33:55.78ID:CGf2GAkC219デフォルトの名無しさん
2025/01/21(火) 07:42:06.00ID:4+X4XnDl まあ抽象的なコードポイントの話じゃなくて、エンコーディングの話、例えば
> WTF-16(=任意の16bit列)
と言ってるから
> WTF-8⊃UTF-8となる
も8bit列を意図してるのなら、成り立たないな。
WTF-8に関しては、WTF-8(=任意の16bit列)ではなくて、
絵文字などをUTF-8エンコードした8bit列は、WTF-8では不正な8bit列となる。
> WTF-16(=任意の16bit列)
と言ってるから
> WTF-8⊃UTF-8となる
も8bit列を意図してるのなら、成り立たないな。
WTF-8に関しては、WTF-8(=任意の16bit列)ではなくて、
絵文字などをUTF-8エンコードした8bit列は、WTF-8では不正な8bit列となる。
220デフォルトの名無しさん
2025/01/21(火) 07:43:40.53ID:4+X4XnDl 訂正
WTF-8に関しては、WTF-8(=任意の8bit列)ではなくて、
WTF-8に関しては、WTF-8(=任意の8bit列)ではなくて、
221デフォルトの名無しさん
2025/01/21(火) 08:02:21.62ID:CGf2GAkC >>219
>>絵文字などをUTF-8エンコードした8bit列は、WTF-8では不正な8bit列となる。
それは君が勘違いしてるよ
UTF-8エンコードした8bit列は必ず有効なWTF-8になるが正しい
反論があるならUTF-8がWTF-8とならない場合のプログラム例を出そう
>>絵文字などをUTF-8エンコードした8bit列は、WTF-8では不正な8bit列となる。
それは君が勘違いしてるよ
UTF-8エンコードした8bit列は必ず有効なWTF-8になるが正しい
反論があるならUTF-8がWTF-8とならない場合のプログラム例を出そう
222デフォルトの名無しさん
2025/01/21(火) 08:06:50.62ID:6E3WwSvm >>221
それを含めた時が冗長性誕生の瞬間である
それを含めた時が冗長性誕生の瞬間である
223デフォルトの名無しさん
2025/01/21(火) 08:11:27.09ID:CGf2GAkC224デフォルトの名無しさん
2025/01/21(火) 08:59:02.25ID:HFAykEjr WTF-8 は定義からして冗長性はない、プログラム以前の問題
WTF-8 は UTF-8 に加えて片サロゲートをUTF-8変換したものが含まれているだけ
サロゲート前半とサロゲート後半の連続も許されてない
それが混じったらWTF-8じゃない
WTF-8∋UTF-8 → ✕
WTF-8⊃UTF-8 → ○
任意の16bit列 = WTF-16 → ○ (未定義文字などを許す前提)
任意の8bit列 = WTF-8 → ✕
WTF-16 と WTF-8 は冗長性なく1対1対応 → ○
基本が分かってないやつがいるので議論が噛み合ってないだけのようだ
WTF-8 は UTF-8 に加えて片サロゲートをUTF-8変換したものが含まれているだけ
サロゲート前半とサロゲート後半の連続も許されてない
それが混じったらWTF-8じゃない
WTF-8∋UTF-8 → ✕
WTF-8⊃UTF-8 → ○
任意の16bit列 = WTF-16 → ○ (未定義文字などを許す前提)
任意の8bit列 = WTF-8 → ✕
WTF-16 と WTF-8 は冗長性なく1対1対応 → ○
基本が分かってないやつがいるので議論が噛み合ってないだけのようだ
225デフォルトの名無しさん
2025/01/21(火) 09:11:27.73ID:nn8C9EMv226デフォルトの名無しさん
2025/01/21(火) 09:23:46.18ID:snb5MXpj WTF-8に冗長表現は起きず脆弱性はないね
冗長が起きると書き込んでる人は、理解できずに間違った思い込みをしているのか、悔しくてデマを繰り返してるのか、わからんけどさ
冗長表現を生成する具体例を一つ示せば済むのに、ここまで来ても一つも示せていない
冗長が起きると書き込んでる人は、理解できずに間違った思い込みをしているのか、悔しくてデマを繰り返してるのか、わからんけどさ
冗長表現を生成する具体例を一つ示せば済むのに、ここまで来ても一つも示せていない
227デフォルトの名無しさん
2025/01/21(火) 10:25:40.02ID:uiolM7XA 帰れ
228デフォルトの名無しさん
2025/01/21(火) 11:37:21.93ID:q2HQSFd2 >>215の言うAにもBにも含まれない「文字」がA+Bに含まれるかもしれない問題、
処理の正しさの観点では(脆弱性の話は置いておいて)
NFC/NFDやIVS/IVD/ZWJ絡みで(well formed UTF-8同士の範囲でも)発生する気がするけど
実際にA+Bを作ってからチェックするのが鉄則なのか?
「文字」じゃなくて「文字列」ならA+Bを作るのが普通と思う
(それと正規表現なら部分マッチが出来たりする)
処理の正しさの観点では(脆弱性の話は置いておいて)
NFC/NFDやIVS/IVD/ZWJ絡みで(well formed UTF-8同士の範囲でも)発生する気がするけど
実際にA+Bを作ってからチェックするのが鉄則なのか?
「文字」じゃなくて「文字列」ならA+Bを作るのが普通と思う
(それと正規表現なら部分マッチが出来たりする)
229デフォルトの名無しさん
2025/01/21(火) 12:16:20.66ID:HFAykEjr230デフォルトの名無しさん
2025/01/21(火) 12:47:14.29ID:mXSJj++Z そんなの要件定義考慮漏れで溢れかえってる
何かあったら現状を仕様にする
何かあったら現状を仕様にする
231デフォルトの名無しさん
2025/01/21(火) 16:35:46.77ID:3Vt9EG/U ライブラリ側に問題がないとはいえ過信はよろしくない
OsStringでは機能が足りず中身を取り出しての直接処理はよくやられてるし
余計な変換をかましてるせいで考慮することが増えてしまってる一方でアプリ側にはWindowsの特殊事情なんて考慮してないコードも山ほどあろう
OsStringでは機能が足りず中身を取り出しての直接処理はよくやられてるし
余計な変換をかましてるせいで考慮することが増えてしまってる一方でアプリ側にはWindowsの特殊事情なんて考慮してないコードも山ほどあろう
232デフォルトの名無しさん
2025/01/21(火) 17:20:43.69ID:HFAykEjr >>231
だから最初から WTF-8 は UTF-8 とは別物
混同したら問題、混同しなければ問題はない
UTF-8 ではサロゲート断片は許されない
WTF-8 ではサロゲートの片側だけ許されるがそのせいで追加の処理が必要
冗長性うんぬんを言い出すのはこの違いが分かってないやつという話題だろ
だから最初から WTF-8 は UTF-8 とは別物
混同したら問題、混同しなければ問題はない
UTF-8 ではサロゲート断片は許されない
WTF-8 ではサロゲートの片側だけ許されるがそのせいで追加の処理が必要
冗長性うんぬんを言い出すのはこの違いが分かってないやつという話題だろ
233デフォルトの名無しさん
2025/01/21(火) 17:51:44.82ID:ARY2cBPO Windowsも対応しているRipGrepの場合、OsStringのまま処理してるけど
ユーザーアプリレベルでWTF-8は必要なのか?
(すぐにpub fn into_string(self) -> Result<String, OsString>してる気がする)
ユーザーアプリレベルでWTF-8は必要なのか?
(すぐにpub fn into_string(self) -> Result<String, OsString>してる気がする)
234デフォルトの名無しさん
2025/01/21(火) 20:27:12.14ID:81VrkBbA 10年以上経ってv0.1.0な時点でネタライブラリでは
235デフォルトの名無しさん
2025/01/21(火) 20:36:26.03ID:vcWEfek9 >>233
OsStringとWTF-8は別物だと理解できてる?
OsStringは元が正規ユニコードならUTF-8となり、異なるならUTF-8を含む拡大集合になる、という抽象的な型
たまたまWindows環境の時は内部がWTF-8になるかもしれないがそんなことを意識せずに使えるところがカギ
自分の管轄範囲を処理する多くのアプリでは元がユニコードでなければエラーとして無視できる
そのためto_string()で文字列すなわちUTF-8へ変換するがそこで実際に変換する必要がなく変換コストはゼロとなる点が実際の目的
このような特性を備えつつUTF-8にできない場合も元の情報を保つ抽象的な型がOsString
そしてWindowsの場合はその内部実装をWTF-8にすると上述の特性群を満たせるというだけの話
OsStringとWTF-8は別物だと理解できてる?
OsStringは元が正規ユニコードならUTF-8となり、異なるならUTF-8を含む拡大集合になる、という抽象的な型
たまたまWindows環境の時は内部がWTF-8になるかもしれないがそんなことを意識せずに使えるところがカギ
自分の管轄範囲を処理する多くのアプリでは元がユニコードでなければエラーとして無視できる
そのためto_string()で文字列すなわちUTF-8へ変換するがそこで実際に変換する必要がなく変換コストはゼロとなる点が実際の目的
このような特性を備えつつUTF-8にできない場合も元の情報を保つ抽象的な型がOsString
そしてWindowsの場合はその内部実装をWTF-8にすると上述の特性群を満たせるというだけの話
236デフォルトの名無しさん
2025/01/21(火) 22:03:34.94ID:HFAykEjr Rust の OsString という基準だと Linux とかだと任意のバイト列なんでそっちがもともとの形だな
たまたま Windows 版で効率考えて WTF-8 変換したものを使ってるだけ
たまたま Windows 版で効率考えて WTF-8 変換したものを使ってるだけ
237デフォルトの名無しさん
2025/01/21(火) 22:39:07.66ID:p3RcK7RU rgは凄く効率を重視してるけどOsStringで扱うしかなくてロスが発生してる
(各ファイルを開くのにWTF-16名に戻す処理が必要)
(各ファイルを開くのにWTF-16名に戻す処理が必要)
238デフォルトの名無しさん
2025/01/22(水) 23:14:48.82ID:qi7PZ6q/ OsStringは異なる環境で統一的に容易にStringと相互変換して扱えるための標準ライブラリ機能
些細なロスすら深刻な影響が出る用途がもし存在するのならば
特定環境に特化した専用のライブラリを用意すればよいだけ
必要な条件を満たすライブラリが既に存在しているかどうかは各自の用途で調べて
些細なロスすら深刻な影響が出る用途がもし存在するのならば
特定環境に特化した専用のライブラリを用意すればよいだけ
必要な条件を満たすライブラリが既に存在しているかどうかは各自の用途で調べて
239デフォルトの名無しさん
2025/01/24(金) 18:16:24.35ID:3xtC4p+Z240デフォルトの名無しさん
2025/01/24(金) 21:50:18.47ID:VaG4uwwC >>239
WTF-8自体を自在に改変するインターフェイスが全くないため、WTF-8独自の問題は発生しない。
WTF-8はWTF-16と1対1に可逆なので、WTF-16で起こる問題は当然WTF-8でも起きる。
WTF-16とはWindows OSが許容している拡張UTF-16、すなわち本来のUTF-16とは異なる16bit列も許す。
したがって、WTF-8を用いて起こる問題は、Windows OSが許容してる範囲内の問題のみであり、新たな問題を持ち込むことはない。
WTF-8自体を自在に改変するインターフェイスが全くないため、WTF-8独自の問題は発生しない。
WTF-8はWTF-16と1対1に可逆なので、WTF-16で起こる問題は当然WTF-8でも起きる。
WTF-16とはWindows OSが許容している拡張UTF-16、すなわち本来のUTF-16とは異なる16bit列も許す。
したがって、WTF-8を用いて起こる問題は、Windows OSが許容してる範囲内の問題のみであり、新たな問題を持ち込むことはない。
241デフォルトの名無しさん
2025/01/25(土) 06:47:37.99ID:IEhZAzOs >>240
なんでもOSのせいにするのは良くないぞ
Windows は片サロゲートどうしを連結することを前提にしてはいない
あくまでも連結してるのはアプリの問題
WTF-8 の連結もアプリの問題OSとは独立
なんでもOSのせいにするのは良くないぞ
Windows は片サロゲートどうしを連結することを前提にしてはいない
あくまでも連結してるのはアプリの問題
WTF-8 の連結もアプリの問題OSとは独立
242デフォルトの名無しさん
2025/01/25(土) 07:40:49.86ID:oQSzfWfA >>241
もちろんその通りで
当たり前の三つの同値
WTF-8で起こりうること = WTF-16で起こりうること = Windowsで起こりうること
これだけの話だな
それを理解できずにWTF-8で新たな問題が生じると勘違いしているバカがWTF-8を批判していた
もちろんその通りで
当たり前の三つの同値
WTF-8で起こりうること = WTF-16で起こりうること = Windowsで起こりうること
これだけの話だな
それを理解できずにWTF-8で新たな問題が生じると勘違いしているバカがWTF-8を批判していた
243デフォルトの名無しさん
2025/01/25(土) 08:02:54.69ID:IEhZAzOs244デフォルトの名無しさん
2025/01/25(土) 08:11:11.01ID:oQSzfWfA245デフォルトの名無しさん
2025/01/25(土) 11:54:33.53ID:IEhZAzOs246デフォルトの名無しさん
2025/01/25(土) 12:08:02.89ID:oQSzfWfA >>245
それも正しい
WindowsもLinuxも正しいユニコード以外を許容している
だからUTF-16やUTF-8を前提としてはいけない
そのためWTF-16やWTF-8あるいは何らか他の枠組みの導入でようやく対応できる
その時に当たり前の三つの同値
WTF-8で起こりうること = WTF-16で起こりうること = Windowsで起こりうること
この事実を理解できるかどうか
これを理解できずにWTF-8で新たな問題が生じると勘違いしているバカがWTF-8を批判していた
それも正しい
WindowsもLinuxも正しいユニコード以外を許容している
だからUTF-16やUTF-8を前提としてはいけない
そのためWTF-16やWTF-8あるいは何らか他の枠組みの導入でようやく対応できる
その時に当たり前の三つの同値
WTF-8で起こりうること = WTF-16で起こりうること = Windowsで起こりうること
この事実を理解できるかどうか
これを理解できずにWTF-8で新たな問題が生じると勘違いしているバカがWTF-8を批判していた
247デフォルトの名無しさん
2025/01/25(土) 12:36:14.63ID:IEhZAzOs248デフォルトの名無しさん
2025/01/25(土) 13:00:31.67ID:oQSzfWfA >>247
どのOSも正しいユニコード以外を許容している
したがってUTF-8/16以外も扱えなければならない
そして非UTF-8/16があった時にそれを認識して区別して扱えなければならない
その区別ができないと既存のUTF-8/16部分にもうっかり混入させて汚染を広げてしまう
この重要性が理解できるかね?
RustではUTF-8とWTF-8(など非ユニコード)は明確に別の型となっているため安全性が保証される
両者を扱えつつ型システムにより必ず区別できる
どのOSも正しいユニコード以外を許容している
したがってUTF-8/16以外も扱えなければならない
そして非UTF-8/16があった時にそれを認識して区別して扱えなければならない
その区別ができないと既存のUTF-8/16部分にもうっかり混入させて汚染を広げてしまう
この重要性が理解できるかね?
RustではUTF-8とWTF-8(など非ユニコード)は明確に別の型となっているため安全性が保証される
両者を扱えつつ型システムにより必ず区別できる
249デフォルトの名無しさん
2025/01/25(土) 13:07:40.11ID:IEhZAzOs250デフォルトの名無しさん
2025/01/25(土) 13:31:18.17ID:oQSzfWfA >>249
どちらのOSも自由を許容している
そのため非ユニコードが混入しうる
OSは歯止めにならない
だからRustのように型で明確に区別できる言語を用いてアプリを作ればよい
非ユニコードが他へ波及することを防ぎつつ安全に扱うことができる
どちらのOSも自由を許容している
そのため非ユニコードが混入しうる
OSは歯止めにならない
だからRustのように型で明確に区別できる言語を用いてアプリを作ればよい
非ユニコードが他へ波及することを防ぎつつ安全に扱うことができる
251デフォルトの名無しさん
2025/01/25(土) 14:44:40.60ID:6/VZHgMn from_encoded_bytes_uncheckedにoverlong UTF-8をブチ込んでinto_stringしたらOk返ってきちゃった
StringまたはWTF-16から変換されること以外は無い前提でチェックは最低限にされてるみたい
unsafe contractを破った俺が悪いのはそうなんだが、これを「WTF-8文字列コンテナ型」だと思ってたらまあまあ死にそう
バイト列からの変換にcheckedな版が無いのも、一応エンコーディング未規定なんだから好き勝手なバイト列から作るもんじゃねーよバーカってことだな
同じことをLinuxでもやったらこっちはinto_stringの時点でErrが返ってくる
OsStringの内部のバッファの不変条件としても違いがあって、Windows以外では任意のバイト列でいいけど、Windowsでは常にWTF-8でなくてはならないようだ
WTF-8それ自体が脆弱性の根源になることはなくても、こうしたややこしさが誤った使い方、ひいては脆弱性を生むことはあるかもしれないとは思った
StringまたはWTF-16から変換されること以外は無い前提でチェックは最低限にされてるみたい
unsafe contractを破った俺が悪いのはそうなんだが、これを「WTF-8文字列コンテナ型」だと思ってたらまあまあ死にそう
バイト列からの変換にcheckedな版が無いのも、一応エンコーディング未規定なんだから好き勝手なバイト列から作るもんじゃねーよバーカってことだな
同じことをLinuxでもやったらこっちはinto_stringの時点でErrが返ってくる
OsStringの内部のバッファの不変条件としても違いがあって、Windows以外では任意のバイト列でいいけど、Windowsでは常にWTF-8でなくてはならないようだ
WTF-8それ自体が脆弱性の根源になることはなくても、こうしたややこしさが誤った使い方、ひいては脆弱性を生むことはあるかもしれないとは思った
252デフォルトの名無しさん
2025/01/25(土) 15:20:14.12ID:0Kd0a2wN >>251
そのunsafe fn from_encoded_bytes_unchecked(byres: Vec<u8>)は安全性の対象外と明示されているね
unsafeとはC言語と同じようにプログラマーの責任で安全性を保証しなければならない
それを理解しない者や扱う技術を持たない者がunsafeを使ってはいけない
それ以前にRustは今回の件も自動的に安全性が保証されるコードを(unsafeを使わずに)書くことができる
そのunsafe fn from_encoded_bytes_unchecked(byres: Vec<u8>)は安全性の対象外と明示されているね
unsafeとはC言語と同じようにプログラマーの責任で安全性を保証しなければならない
それを理解しない者や扱う技術を持たない者がunsafeを使ってはいけない
それ以前にRustは今回の件も自動的に安全性が保証されるコードを(unsafeを使わずに)書くことができる
253デフォルトの名無しさん
2025/01/25(土) 15:40:07.61ID:6/VZHgMn254デフォルトの名無しさん
2025/01/25(土) 15:45:28.44ID:6/VZHgMn というかもうWTF-8の話じゃなくてRustの話になりつつあるしこの辺で終わっとこうぜ
続きがやりたければRust本スレで
続きがやりたければRust本スレで
255デフォルトの名無しさん
2025/01/25(土) 21:10:55.94ID:yCgioYGI Rustスレから出てこないで欲しい
256デフォルトの名無しさん
2025/01/25(土) 22:20:25.13ID:LC7IJQQw 構うから居座り続けるんだよ
学習しろ
学習しろ
257デフォルトの名無しさん
2025/01/26(日) 10:07:42.23ID:QXh9thRU Macの濁点半濁点問題ってUTF-8の正規化とやらの範疇に入るのかな
文字構成の解釈の仕方の問題だから正規化を実装する人の思想に強く依存してしまうと思うけど
文字構成の解釈の仕方の問題だから正規化を実装する人の思想に強く依存してしまうと思うけど
258デフォルトの名無しさん
2025/01/26(日) 10:56:58.06ID:14aIx6OH 日本人からすると濁点半濁点の違うMacうぜーとなるけど
欧州でもdiacriticsがあるから同じくMacうぜーだろうな
欧州でもdiacriticsがあるから同じくMacうぜーだろうな
259デフォルトの名無しさん
2025/01/26(日) 11:31:33.02ID:orn1Lem+ >>257
このスレにいるなら文字コードとエンコーディングの区別を理解しよう
UTF-8はエンコーディング方法なので
そこでの正規化は冗長表現の排除やサロゲートペアの排除を指す
一方濁点半濁点の話は文字コードであるUnicodeの正規化の話であってUTF-8は一切関係がない
このスレにいるなら文字コードとエンコーディングの区別を理解しよう
UTF-8はエンコーディング方法なので
そこでの正規化は冗長表現の排除やサロゲートペアの排除を指す
一方濁点半濁点の話は文字コードであるUnicodeの正規化の話であってUTF-8は一切関係がない
260デフォルトの名無しさん
2025/01/26(日) 11:52:28.72ID:OHuPDl3g >>257
Unicode の正規化は規格で決まっている
基本的に実装者の自由にやってはいけない
・複数の正規化が規定されてるのでそのうちの1つに過ぎない
・MacOSの正規化は一部規格から外れてる
という問題はある
Unicode の正規化は規格で決まっている
基本的に実装者の自由にやってはいけない
・複数の正規化が規定されてるのでそのうちの1つに過ぎない
・MacOSの正規化は一部規格から外れてる
という問題はある
261デフォルトの名無しさん
2025/01/26(日) 12:03:07.52ID:Lrs5O7+s Macの濁点半濁点問題はEBCDICのカナ(半角カタカナ)をきれいに表示する努力をした結果なのだろうか?
262デフォルトの名無しさん
2025/01/27(月) 11:38:12.00ID:ss2Vvpwv ファイル名は正規化するべきなのかするべきでないのか、という問題があり
Macは正規化する派
正規化するとした場合、どういう正規化がいいか、それが次の問題
Macは正規化する派
正規化するとした場合、どういう正規化がいいか、それが次の問題
263デフォルトの名無しさん
2025/01/27(月) 18:51:09.07ID:5zVfH4ct 日本語のフォントを外国人が作っているせいで日本語の記号の見た目がおかしくなった
264デフォルトの名無しさん
2025/01/27(月) 18:52:15.56ID:5zVfH4ct >>262
Macのアップル社もGoogle社も改行コードに対しては意地悪すぎだろ
Macのアップル社もGoogle社も改行コードに対しては意地悪すぎだろ
265デフォルトの名無しさん
2025/01/27(月) 22:05:41.27ID:1OoDt+VN Apple の改行コードはCRだったものがMac OS X でLFになったのを意地悪と言っているのだろうか?
266デフォルトの名無しさん
2025/01/27(月) 23:31:59.65ID:5zVfH4ct267デフォルトの名無しさん
2025/01/28(火) 10:08:29.84ID:dqvH8r5C268デフォルトの名無しさん
2025/01/28(火) 11:39:24.54ID:JQ2UpNE9269デフォルトの名無しさん
2025/01/30(木) 07:10:47.96ID:gms+ATb5 ワシの霊感では、
CR LF → LF 変換 は無理
CR LF → CR 変換 も無理
その逆、は可能、スナワチ
LF → CR LF 変換等は、可能
なんでかって❓ 霊感的には、
それが可能と仮定すれば、そのような問題は解決済
しかし未だに未解決の模様なので、
では、霊感的にではなく、数学的にはどうなのか
吟味しようかな。てか不可能が証明されても
その証明は、闇に葬る必要があるよな
by 💃🥳🤔
とにかく、アプリの改行バグなくせぇーー
by 👤🤡
CR LF → LF 変換 は無理
CR LF → CR 変換 も無理
その逆、は可能、スナワチ
LF → CR LF 変換等は、可能
なんでかって❓ 霊感的には、
それが可能と仮定すれば、そのような問題は解決済
しかし未だに未解決の模様なので、
では、霊感的にではなく、数学的にはどうなのか
吟味しようかな。てか不可能が証明されても
その証明は、闇に葬る必要があるよな
by 💃🥳🤔
とにかく、アプリの改行バグなくせぇーー
by 👤🤡
270デフォルトの名無しさん
2025/01/30(木) 10:13:34.95ID:lxoi8Hgj RFCもいまどき入力は寛容にとは書いてないんだっけか
271デフォルトの名無しさん
2025/01/30(木) 23:31:56.82ID:xDtExgvT 改行の話をするならこのTRには目を通しているよね?
https://www.unicode.org/reports/tr14/tr14-32.html#BreakingRules
https://www.unicode.org/reports/tr14/tr14-32.html#BreakingRules
272デフォルトの名無しさん
2025/01/31(金) 19:55:09.44ID:0CYGlf8F CRの直後にLFが現れたなら、改行2つではないとわかる。
それなのに改行2つと解釈するのは悪意でしかないり
それなのに改行2つと解釈するのは悪意でしかないり
273デフォルトの名無しさん
2025/01/31(金) 20:06:45.58ID:RSTFpkS7 CR や LF より前に CRLF を処理しないのは悪意でしか無いな
274デフォルトの名無しさん
2025/01/31(金) 20:07:21.09ID:B141IEhK275デフォルトの名無しさん
2025/01/31(金) 20:25:32.29ID:uF0JLDg9 >>274
みんながみんな勝手に modified NFD とか作り始めたら互換性とか規格とか何の意味もなくなる
勝手なオレオレ基準は非難されるべき
単に古い規格準拠というだけなら許されるが Apple のはそうじゃない
みんながみんな勝手に modified NFD とか作り始めたら互換性とか規格とか何の意味もなくなる
勝手なオレオレ基準は非難されるべき
単に古い規格準拠というだけなら許されるが Apple のはそうじゃない
276デフォルトの名無しさん
2025/01/31(金) 20:45:51.19ID:B141IEhK そもそも正規化自体は都合に合わせて勝手にやるもんだぜ?
Windowsの.で終わるファイル名を拡張子なしと同一視するのも正規化だし
掲示板への書き込みで行頭のスペースが消えるのも正規化だ
Unicodeで定義されたやつだけが正規化ではないというのは大前提として
字形を変えない範囲で厄介な合成分解で別ファイル扱いになるのを避けたい
というのは他の文字コードからUnicodeへの過渡期では当然の要求だろう
他のOSとのやりとりでトラブルが起きるようになったのはもっと考えるべきだったとは思うが
Windowsの.で終わるファイル名を拡張子なしと同一視するのも正規化だし
掲示板への書き込みで行頭のスペースが消えるのも正規化だ
Unicodeで定義されたやつだけが正規化ではないというのは大前提として
字形を変えない範囲で厄介な合成分解で別ファイル扱いになるのを避けたい
というのは他の文字コードからUnicodeへの過渡期では当然の要求だろう
他のOSとのやりとりでトラブルが起きるようになったのはもっと考えるべきだったとは思うが
277デフォルトの名無しさん
2025/01/31(金) 20:53:12.36ID:uF0JLDg9 >>276
それは違う
Apple はユニコード・コンソーシアムの設立からのメンバー
技術的に規格に問題があるののならそれを変えればいい、それをやらなければいけない立場
中核メンバーが自分たちが作った規格を勝手に無視してたら、規格の意味なんてない
この件はどう言い訳しても Apple はクソという結論にしかならない
それは違う
Apple はユニコード・コンソーシアムの設立からのメンバー
技術的に規格に問題があるののならそれを変えればいい、それをやらなければいけない立場
中核メンバーが自分たちが作った規格を勝手に無視してたら、規格の意味なんてない
この件はどう言い訳しても Apple はクソという結論にしかならない
278デフォルトの名無しさん
2025/01/31(金) 20:55:58.32ID:B141IEhK >>277
Appleは提案したが通らなかったってどっかで見たぞ
Appleは提案したが通らなかったってどっかで見たぞ
279デフォルトの名無しさん
2025/01/31(金) 20:57:03.60ID:h9+hJoTP 技術的に無理な仕様作ったん?
280デフォルトの名無しさん
2025/01/31(金) 21:06:00.74ID:uF0JLDg9281デフォルトの名無しさん
2025/01/31(金) 21:19:51.37ID:1pwkweKb 規格があるのにそれを使わない分野なんて沢山ありそうだが
実際のところ金を出せて声がでかければ規格なんていくらでも通せるんだから
実際のところ金を出せて声がでかければ規格なんていくらでも通せるんだから
282デフォルトの名無しさん
2025/01/31(金) 21:24:04.22ID:B141IEhK >>280
俺が見た記事は残ってないだろうけど検索したら出てきたunicode.org内の議事録はたぶんこれ
ttps://www.unicode.org/review/resolved-pri.html#pri7
俺が見た記事は残ってないだろうけど検索したら出てきたunicode.org内の議事録はたぶんこれ
ttps://www.unicode.org/review/resolved-pri.html#pri7
283デフォルトの名無しさん
2025/01/31(金) 21:26:16.69ID:gGXkx70A >>281
ヒデェ
ヒデェ
284デフォルトの名無しさん
2025/01/31(金) 22:22:23.03ID:mygoMuj6 >>282
www
一部除外したら一貫性が無くなって正規化が 正規化じゃなくなるから勝手な除外は駄目って明確に指摘されてるな
なんで実装したんだろう? いやVFとか使いたくなかったんだろうけど、
どうしてもやりたければ任意の除外ではなく VF のみ除外みたいなので再提案すべきだったのでは
www
一部除外したら一貫性が無くなって正規化が 正規化じゃなくなるから勝手な除外は駄目って明確に指摘されてるな
なんで実装したんだろう? いやVFとか使いたくなかったんだろうけど、
どうしてもやりたければ任意の除外ではなく VF のみ除外みたいなので再提案すべきだったのでは
285デフォルトの名無しさん
2025/02/16(日) 22:21:14.00ID:y/0wzlVz https://gigazine.net/news/20250214-unicode-hidden-message/
Unicodeでは一見すると普通の文字の中に「秘密のメッセージ」を埋め込むことが可能だという指摘
Unicodeでは一見すると普通の文字の中に「秘密のメッセージ」を埋め込むことが可能だという指摘
286デフォルトの名無しさん
2025/02/16(日) 23:51:54.49ID:hLnUvUfF287デフォルトの名無しさん
2025/02/17(月) 16:59:47.72ID:GjzIkJ/e Unicodeはそのうちオーディオブック用やa11yで読み上げ音声用のVSが定義されそう
288デフォルトの名無しさん
2025/02/17(月) 17:34:45.48ID:9sDD+e7d 漢字みたいな複数の読み方があるのは難しいだろうね
289デフォルトの名無しさん
2025/02/17(月) 18:36:11.68ID:tdbxV0fJ MSOfiiceでIME入力がphoneticsとして保存されてて読み仮名表示出来るのは、他に広まっても良いのにな
290デフォルトの名無しさん
2025/02/18(火) 12:25:03.72ID:HbHlBTpR >>286
なるほどね
fn byte_to_variation_selector(byte: u8) -> char {
if byte < 16 {
char::from_u32(0xFE00 + byte as u32).unwrap()
} else {
char::from_u32(0xE0110 + (byte - 16) as u32).unwrap()
}
}
なるほどね
fn byte_to_variation_selector(byte: u8) -> char {
if byte < 16 {
char::from_u32(0xFE00 + byte as u32).unwrap()
} else {
char::from_u32(0xE0110 + (byte - 16) as u32).unwrap()
}
}
291デフォルトの名無しさん
2025/02/28(金) 17:04:23.70ID:kF3VgEHE fn byte_to_variation_selector(byte: u8) -> Option<char> {
if byte < 16 {
char::from_u32(0xFE00 + byte as u32)
} else {
char::from_u32(0xE0110 + (byte - 16) as u32)
}
}
if byte < 16 {
char::from_u32(0xFE00 + byte as u32)
} else {
char::from_u32(0xE0110 + (byte - 16) as u32)
}
}
292デフォルトの名無しさん
2025/04/03(木) 21:05:53.03ID:tEk54HNS 「Windows11でファイル名に絵文字が使えることを知って、1つ賢くなった」便利と思われる機能が追加→情シスがバールを担いで暴れ出す案件
https://posfie.com/@blackstaragent/p/kpHrLMR
今まで使えなかったんだっけ?と思って最後まで見たら
ちゃんと前から使えてたって突っ込まれてたわ
https://posfie.com/@blackstaragent/p/kpHrLMR
今まで使えなかったんだっけ?と思って最後まで見たら
ちゃんと前から使えてたって突っ込まれてたわ
293デフォルトの名無しさん
2025/04/06(日) 16:37:54.44ID:+flcOJuk 普通に文を書く時でも()?!などの記号をASCII文字にするか全角文字にするか
濁点と半濁点を結合済み文字にするか別の文字にするかで迷ってしまう
濁点と半濁点を結合済み文字にするか別の文字にするかで迷ってしまう
294デフォルトの名無しさん
2025/04/07(月) 21:43:17.60ID:1UVr/FZP 濁点と半濁点が別の文字だと認識しているのはおかしい
295デフォルトの名無しさん
2025/04/08(火) 17:04:31.43ID:UfxEZoR8 まし"て"
296デフォルトの名無しさん
2025/04/09(水) 01:54:47.78ID:t8BwIxsD Windowsのエクスプローラーで見るとキャラクタセットによっては濁点が別の文字だとわからないことがある
297デフォルトの名無しさん
2025/04/11(金) 20:08:58.20ID:i2PY9ZNn 朝鮮系の奴隷労働者が造ったと思われるサイトは
濁点が抜けてる気持ち悪いところがいくつかある
濁点が抜けてる気持ち悪いところがいくつかある
298デフォルトの名無しさん
2025/04/12(土) 06:35:11.93ID:IMDrBc8a299デフォルトの名無しさん
2025/05/02(金) 09:50:51.92ID:k5bGwZZ0 不可視化トラップで教育素材造るのはいいね
https://www.youtube.com/watch?v=cXTBwD798Lk
https://www.youtube.com/watch?v=cXTBwD798Lk
300デフォルトの名無しさん
2025/05/02(金) 18:10:04.97ID:9xoZUliT ユニコード悪用ヤバいな
>>298
>公式アプリと同じ開発者に見える名前で偽アプリが提供されました。
>この詐欺師は、印刷に現れないスペース文字を開発者名に混ぜ込むことでバリデーションのすり抜けに成功しました。
>このハックによって100万人以上が騙されました。
>>298
>公式アプリと同じ開発者に見える名前で偽アプリが提供されました。
>この詐欺師は、印刷に現れないスペース文字を開発者名に混ぜ込むことでバリデーションのすり抜けに成功しました。
>このハックによって100万人以上が騙されました。
301デフォルトの名無しさん
2025/05/02(金) 20:30:48.79ID:rPO248eK >印刷に現れないスペース文字
誤訳だな
AIあほすぎ
誤訳だな
AIあほすぎ
302デフォルトの名無しさん
2025/05/07(水) 21:40:30.18ID:9JkcRkxN https://github.com/microsoft/cascadia-code/releases/tag/cascadia-next
Joyo, JIS1, JIS2って何だよ
日本人向けのフォントなら日本人に分かるような書き方してくれ
Joyo, JIS1, JIS2って何だよ
日本人向けのフォントなら日本人に分かるような書き方してくれ
303デフォルトの名無しさん
2025/05/08(木) 02:26:11.93ID:US+UAC1U304デフォルトの名無しさん
2025/05/08(木) 03:01:55.71ID:US+UAC1U ちなみにライブラリで必ずやることに変えれば
規格準拠にしやすいと思う
フル準拠にするとカーネルに入れるにはテーブルが大きすぎる
けどじゃあPython処理系はどうするんだ
osモジュールに担当させるのか
osモジュールみたいな機構がない言語処理系ではどうするんだ
とか色々大変
規格準拠にしやすいと思う
フル準拠にするとカーネルに入れるにはテーブルが大きすぎる
けどじゃあPython処理系はどうするんだ
osモジュールに担当させるのか
osモジュールみたいな機構がない言語処理系ではどうするんだ
とか色々大変
305デフォルトの名無しさん
2025/05/08(木) 03:15:04.31ID:US+UAC1U 要するにパス名正規化は無意味で無駄
レスを投稿する
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★3 [煮卵★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★2 [蚤の市★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も [1ゲットロボ★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外交】日中関係悪化、長期化の様相 2012年には自動車輸出80%減も ロイター★2 [1ゲットロボ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 【悲報】女性初の総理大臣 高市早苗氏、安倍晋三さんが積み上げてきたものを一瞬でぶっ壊してしまう😱wwwwwwwwwwwwwwwwwwwwww [871926377]
- トランプ聖帝「中国を倒すのではなく協力することでアメリカは強くなる!MAGA!」 高市どうすんのこれ… [878970802]
- 愛国者ナザレンコ「左翼は自己中な差別主義者で偽善者。日本人ファーストを叩いておいて台湾人が死んでも知らな〜いでしょ。中露の犬」 [856698234]
- 【高市悲報】お米券、予算効率が極悪!額面440円を500円で取得。1割以上手数料。これに事務費かけたらムダばかり。マイナ口座で良いだろ [219241683]
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
- 【高市悲報】経団連会長、高市と面談「おい!ちゃんと中国と対話しろよ!😨」 [359965264]
