■101959 |
Re[3]: ListBoxに表示する文字列を揃える方法 |
□投稿者/ 魔界の仮面弁士 -(2023/05/19(Fri) 16:36:09)
| 2023/05/19(Fri) 16:56:19 編集(投稿者)
■No101958 (初心者 さん) に返信 > 下記サイトを参考に空白埋めで揃えようとしています。 > http://hanatyan.sakura.ne.jp/dotnet/StrCut.htm それは Shift_JIS の文字集合に収録されている文字のみを対象とした手法です。 日本語環境を前提としたものであり、他言語環境で通用する手法ではありません。
たとえば Unicode には「ゼロ幅文字」というものが存在しますが、それには非対応です。 同じ文字であっても、文章の先頭に来た場合と 二文字目以降に来た場合で文字幅が異なる言語なんてもありますしね。
あるいは、 TextBox1.Text = ChrW(&HD842) & ChrW(&HDFB7) & ChrW(&H91CE) & ChrW(&H5BB6) TextBox2.Text = ChrW(&H5409) & ChrW(&H91CE) & ChrW(&H5BB6) のような文字列の桁位置合わせにも向かないでしょう。(両者はいずれも漢字 3 文字)
また、『┠』や『α』といった文字は、日本語向けフォントでは 全角相当でレンダリングされることが多いですが、他国語対応フォントでは 半角相当でレンダリングされる可能性があります。
なので空白でそろえるのではなく、先ほどの回答でも述べたように、 ListBox を使う代わりに、1 行を複数の列で表示できるコントロール (ListView など)に変更するか、あるいはオーナードローなどで 対処することをお奨めします。 http://hanatyan.sakura.ne.jp/vb2005/vb2013listview01.htm
> データが英語やハングル、中国語など様々な言語で管理されています。 元データの「文字コード」が混在しているわけではないですよね?
たとえば、文字集合としての Unicode であれば、 同一の文字コード(UTF-7 とか UTF-8 とか UTF-16LE とか)にて、 それらの文字種を同時に扱えます。
厳密にいえば Unicode バージョンによって収録している文字数が異なりますし、 Unicode 未収録の文字(たとえば日本の戸籍統一文字の一部など)もあるので、 複数の文字コードを併用して管理することが無いとは言えませんけれどね…。
-- 以下蛇足 -- たとえば韓国語の場合、ハングル自体は 24 種(子音14個+母音10個)ですが、 それらの組み合わせで一つの文字を表すため、文字種そのものは 11,172個あります。 しかし日常で使う文字は3〜4千字程度なので、韓国系文字コードでは よく使われるハングルしか収録されていません。
韓国の Wansung (KS X 1001:2002) に収録されている文字数は 8227文字(ハングル2350字、漢字4888字、その他989)です。 これには 平仮名(83文字)や片仮名(86文字)なども含まれています。
中文漢字向けの物で見てみると、 GB 18030-2022 で 87,887文字 GB 18030-2005 で 70,244文字 という収録状況です。
ちなみに VB6 当時の Unicode は UCS-2 相当の符号化を想定しており、 最大でも基本多言語面の 65,536 文字種しか保持できませんでした。
現在の VB ではサロゲートペアや UTF-8 をサポートしたので、 Unicode の基本多言語面外の文字を扱えるようになっています。 (絵文字サポートなどは、WPF と WinForm で状況が異なるのですけれど)
Unicode 2.0 で 38,950文字を収録 Unicode 3.2 で 95,221文字を収録(JIS X 0213 に正式対応) Unicode 15.0 で 149,186文字を収録 |
|