[過去ログ] 文字コード総合スレ Part12 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
853(2): デフォルトの名無しさん [sage] 2020/02/05(水) 18:34:07.02 ID:qBm/0cTb(1) AAS
>>847847(2): デフォルトの名無しさん [sage] 2020/02/05(水) 10:23:19.19 ID:MS9bo9CR(1/2) AAS
固定フォントのターミナルのような環境である文字のフォントの幅が全幅か半幅か判別する確実な方法ってありますか?
Unicode前提です
Unicode的にアジアンなんとかというドキュメントでそれに触れられているのを見つけましたが
結局のところ使用されているフォントで決まるような気がします
となるとCLIアプリが表示する前に判別する方法はないような
表示したあとならターミナルにカーソル位置問い合わせればわかりそうだと思いましたが
・Unicodeでは文字幅は 0(結合文字)、1(いわゆる半角)、2(いわゆる全角)、1か2(曖昧幅) のいずれかに決まっている
・1か2になるのはαや☆などであり、東アジアの環境で2、それ以外で1
・wcwidthで調べるとその値を返すが、曖昧幅への対応がどうなっているかは分からない
・linuxのglibcは、データを自分で修正しない限り曖昧幅は1扱い(LANG=ja_JP.eucJPすれば2にはなる)
・CLIでのカーソル位置はカーネルのttyドライバが担当しており、そもそもフォン卜の情報を持っていない
・linuxカーネルでは全ての文字が(全角も)幅1扱い
・行編集もtty担当なので、catをそのまま実行して全角文字を入力後backspaceするとカーソルがずれる
・多くのシェルはwcwidthで入力/削除された文字やプロンプトに表示する文字の幅を調べ、必要に応じてカーソルを移動させる
・ターミナルはwcwidthまたは同等の独自関数(曖昧幅の設定ができることが多い)で文字幅を調べて、実際に表示させる
・等幅フォントでも曖昧幅の文字がどちらで実装されているかそれぞれ異なる上、ターミナルはフォントの文字幅情報を使わないことが多い(プロポーショナルでないことのみ確認)
・↑により、文字が重なったり変な隙間ができたりすることがある
・一部のターミナルはwcwidthの結果に従うように文字を潰したり引きのばしたりして表示する(minttyとか)
・アプリ(シェルとか)、ライブラリ(ncursesとか)、端末マルチプレクサ(tmuxとか)、端末エミュレータ、カーネル(tty)、フォント全てで想定する幅がそろっていないとうまく動かない
・日本語フォントの多くは曖昧幅2なので、linuxのCLIではαや☆がおかしくなることが多い(wcwidthが1を返すせい)
・Unicodeを作った西洋人は馬鹿だから、罫線素片の幅も曖昧で、ncursesがバグる
・絵文字は文字幅1だが、フォン卜の多くは2で実装されているのでおかしくなる
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.029s