VbStrConv.Narrowでエラーが出ます。
投稿者 (削除されました)  ()
投稿日時
2021/8/10 15:39:44
(削除されました)
投稿者 るきお  (社会人)
投稿日時
2021/8/10 15:39:49
.NET 5 でしょうか?
とりあえず、エラーメッセージに書いてある RegisterProviderメソッドがヒントで、下記のようにすれば、実行はできます。
何かエラーが発生している場合は、できましたら、コピー&貼り付けすればすぐにこちらでもエラーが再現できるプログラムを投稿していただけるとお互い時間の節約になると思います。
なお、投稿されているプログラムはいわゆるサロゲートペアの文字には対応できないようですのですのでご注意ください。
また、一般的なケースでは文字列の幅を取得するには MeasureString が使用できます。
とりあえず、エラーメッセージに書いてある RegisterProviderメソッドがヒントで、下記のようにすれば、実行はできます。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
Dim result As String = StrConv("ア", VbStrConv.Narrow)
何かエラーが発生している場合は、できましたら、コピー&貼り付けすればすぐにこちらでもエラーが再現できるプログラムを投稿していただけるとお互い時間の節約になると思います。
なお、投稿されているプログラムはいわゆるサロゲートペアの文字には対応できないようですのですのでご注意ください。
また、一般的なケースでは文字列の幅を取得するには MeasureString が使用できます。
投稿者 英人  (社会人)
投稿日時
2021/8/10 16:04:36
るきお様、ありがとうございます。
意味は良く分かりませんでしたが、貼り付けてみたところエラーは出ず、
無事に動くようになりました。
もとのプログラムも昔にこちらで教えていただいたVB6のものと思います。
その説もありがとうございました。
使用目的は、あるCADから使用できるプログラムの為でして、
全角、半角の区別は厳密にはそのCADのプログラムによっていますので、
違いがでるかもしれません。CADではMS ゴシックが使われています。
MeasureStringは、スクリーンとか印刷で使われていると思いましたが、
そのCAD上では、文字列の扱いでは無く、1文字1文字を配置して表示、印刷される仕様だと思いますので、このような処理が必要となっていました。
重ねて、ありがとうございました。
意味は良く分かりませんでしたが、貼り付けてみたところエラーは出ず、
無事に動くようになりました。
もとのプログラムも昔にこちらで教えていただいたVB6のものと思います。
その説もありがとうございました。
使用目的は、あるCADから使用できるプログラムの為でして、
全角、半角の区別は厳密にはそのCADのプログラムによっていますので、
違いがでるかもしれません。CADではMS ゴシックが使われています。
MeasureStringは、スクリーンとか印刷で使われていると思いましたが、
そのCAD上では、文字列の扱いでは無く、1文字1文字を配置して表示、印刷される仕様だと思いますので、このような処理が必要となっていました。
重ねて、ありがとうございました。
下記のm = Len(StrConv(Mid(str, i, 1), VbStrConv.Narrow))
の位置で
「System.NotSupportedException: 'No data is available for encoding 932. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.'」
というエラーで出ます。
VbStrConv.Narrowが「Visual Basic においてカルチャが文字列に与える影響」でエラーが出るということのようですが、どうすれば良いのでしょうか。