- - PR -
半角→全角へ
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-01-30 17:18
VbStrConv.Narrowだと、
"ケ" -> "ケ" "ヶ" -> "ヶ" 基本的に1対1対応ですね。 | ||||
|
投稿日時: 2003-01-30 18:43
WindowsXPでしましたが、相変わらず半角円マークは全角に変わりませんねぇ...
一昨年、半角を全角に換える必要があったので、C++からWin32APIを使ってやったのですが、半角円マークだけ置き換わらないので、APIで変換した後にもう一度スキャンするという、不細工な方法を使いました。 LocaleIDは、ヘルプにも書いてありますが、システムに設定されている言語以外に換えるときに0以外を指定します。何番がどこに対応しているかは、プラットフォームSDKのヘルプにあると思います。これを指定するのはどんなとき・・・例えば、半角で「カ゛」(2文字)をこの関数で全角に変換すると、「が」1文字に変換します。ん?なぜカタカナがひらがなになるかって?ちゃんとオプションがあります。この辺の制御をしていると思われます。例えば、ドイツ語には「ウムラウト」でしたっけ?ありますよね。これを適切に処理してくれるのでしょう。ギリシャに設定して「a」をワイドにしたら「α」になったりして・・・? [ メッセージ編集済み 編集者: Jitta 編集日時 2003-01-30 18:53 ] | ||||
|
投稿日時: 2003-02-05 11:17
はじめまして初投稿のどらごんと申します_(_^_)_<以後、よろしくお願いします Jittaさんがおっしゃる通り、VB過去バージョンのStrConv同様に ・[\][']["]が正常にWide変換出来ない という現象をWindowsXPで確認済みです ワタシも不細工ではありますが、変換変換また変換で対応しました。 本当は、Microsoft.VisualBasic.strConvをオーバーライドしたかったのですが、 勉強不足で実現出来ませんでした。もっと良い方法などがあれば・・・ サンプルまでに(こんなんです) Public Function StrConvEx(ByRef istrValue As String, _ ByVal iConversion As VbStrConv, _ Optional ByVal iLocalID As Long = 0) As String If iConversion = vbWide Then istrValue = istrValue.Replace("\"c, "¥"c) istrValue = istrValue.Replace("'"c, "’"c) istrValue = istrValue.Replace(""""c, Chr(&H8168)) ' "の2バイト文字 End If Return StrConv(istrValue, iConversion, iLocalID) End Function | ||||
|
投稿日時: 2003-02-05 16:15
え!それは気がつきませんでした。キーボードから入力できる文字はすべて試したと思っていたんだけどなぁ・・・ ところでご提示のサンプルでは、引数「istrValue」の値=呼び出し元の値が変わってしまいますよね?それはそれで仕様だったのですか?また、iConversionはフラグの合成ですが、複数のフラグ「全角にして英小文字にする」という指定に対して大丈夫ですか(すみません、VBでの扱いについては理解できていません。BCBでは==演算子で処理できなかったので)。 | ||||
|
投稿日時: 2003-02-05 21:21
ん〜確かに。 速度重視で参照渡しにしたつもりでしたが、使う側から言ったらバグの基ですね) 値渡しにしておきます。助かりました(将来的に)、ありがとうございます。 あ、それとiConversionは大丈夫ですよ♪元々あるStrConvと同じ引数型の宣言にしておくだけでフラグ合成も自動で行ってくれますので。 |