[過去ログ]
文字コード総合スレ Part12 (1002レス)
文字コード総合スレ Part12 http://mevius.5ch.net/test/read.cgi/tech/1544931495/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
847: デフォルトの名無しさん [sage] 2020/02/05(水) 10:23:19.19 ID:MS9bo9CR 固定フォントのターミナルのような環境である文字のフォントの幅が全幅か半幅か判別する確実な方法ってありますか? Unicode前提です Unicode的にアジアンなんとかというドキュメントでそれに触れられているのを見つけましたが 結局のところ使用されているフォントで決まるような気がします となるとCLIアプリが表示する前に判別する方法はないような 表示したあとならターミナルにカーソル位置問い合わせればわかりそうだと思いましたが http://mevius.5ch.net/test/read.cgi/tech/1544931495/847
851: デフォルトの名無しさん [] 2020/02/05(水) 16:28:36.97 ID:2rKdW1Ec >>847 前にpythonで書いたときは unicodedata.east_asian_width() 使ったと思う Win32APIだと表示前に文字列全体の描画幅を求める方法があったと思う http://mevius.5ch.net/test/read.cgi/tech/1544931495/851
853: デフォルトの名無しさん [sage] 2020/02/05(水) 18:34:07.02 ID:qBm/0cTb >>847 ・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で実装されているのでおかしくなる http://mevius.5ch.net/test/read.cgi/tech/1544931495/853
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s