Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
文字コード 追加で教えて欲しいです
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30649#CommentId84736
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2021/10/7 23:06:29
>> Public Function ToUTF16
> は、言語が何なのか?試せませんでした・・・
失礼いたしました。
Visual Basic 14.0
以降向けのコードです。
NameOf 演算子が使われていることから、VB2015 以上が必要です。
とはいえ NameOf(codePage) は、文字列 "codePage" と完全に同義なので、
VB2013 以下の場合は、文字列にそのまま置き換えてください。
NameOf の事を知らない場合でも、Throw ステートメントが存在することや、
『If codePage < 0 OrElse &H10FFFF < codePage Then』の行を見ることで、
少なくとも VB.NET であることは、おそらく予想いただけていたものと思います。
VBA や VBScript では、Or はあっても OrElse はありませんからね。
さらに言えば、Function の戻り値の型が『As UShort()』であったことから、
最初の一行だけ見ても、少なくとも VB2005 以上が対象だと判定することができます。
ちなみに、VB.NET 2002/2003 でも動かそうとするのであれば、
As UShort を As UInt16 と書き換えて、CUShort(x) を UInt16.Parse(x) にしたうえで、
最後の『Return {us, ls}』は、『Return New UInt32() {us, ls}』で置き換えます。
>> Gekka さんのコードを参考にして、「𩸽」の文字を試してみました。
> これが、知りたかった話なのですが、
Gekka さんのソース、ほぼそのままですよ。
やっていることは、フォントファイルのバイナリを解析しているだけなので、
ロジック的には、VBA でも実装可能です。
> これを導いたコードは、御教授いただけないでしょうか?
コード全文は長いので省きますが、
①Option Strict On 対応にするために、結構な手直しが必要でした。
修正箇所が多いので仔細は省略しますが、
Option Strict Off であれば、ほぼそのまま動くかもしれません。
②TTC クラスの FindFont メソッドは、フォント名から *.ttf/*.ttc を検索するものです。
うまく検索できない場合があったので、その場合には
Return New System.IO.FileInfo("C:\Users\Y2\AppData\Local\Microsoft\Windows\Fonts\ipamjm.ttf")
のように固定パスで FileInfo を返すようにすれば、とりあえず先に進むかと。
③肝となるのが Public Shared Function FindISV なわけですが、元のコードでは
ByVal targetChar As Char な引数を受け取り、CUInt(AscW(targetChar)) を渡しています。
これだと、サロゲートペアを処理できないので、メソッドを Overloads して、
ByVal targetChar As UInteger を受け取るメソッドをもう一つ用意してみてください。
そして、このメソッドに "𩸽" を渡すのではなく、そのコードポイントとなる
&H29E3DUI を引き渡すようにします。
ちなみに、フォームのタイトルバーに書いた情報は、.ttf ファイルのプロパティを見て
書き写したものですが、この情報をプログラムから取得したいのであれば、
TTF クラスの Names プロパティから取得できます。(Gekka さんのコードでは
TTF クラスの IVSMap プロパティしか参照していませんが、Names も読み取れるように実装されています)