VB2010を使用しています。
Z1=人物名とする場合
If "F040" <= Hex(Asc(VBStrings.Mid$(Z1, intIndex, 1))) And _
Hex(Asc(VBStrings.Mid$(Z1, intIndex, 1))<= "F9FC" Then
でVB6のときはZ1 に外字を含むかどうかの判断ができていたのですが、
VB2010ではこの条件でひっかかってくれません。
コード的にエラーにもなってないので、原因がわかりません。
どうすれば、うまく外字を判断できるのでしょうか?
"F040"→"FFFFF040"
"F9FC"→"FFFFFCFC" とすることで解決しました。
お騒がせしました。
解決となっていますが……。
If Char.GetUnicodeCategory(Z1, intIndex - 1) = System.Globalization.UnicodeCategory.PrivateUse Then
の方がよいでしょう。
外字はWindows-31jで表せない領域にも定義可能ですので。
# 「外字」はUnicodeの「私用領域」に割り付けられます。
YuOさん
ありがとうございます。
解決したと思ってましたが、あれでは全て外字を抽出できなかったんですね。
勉強になりました。
「外字を含むかどうか」を VB2010 で判定させるなら、
Dim hasGaiji As Boolean = Z1.Any(Function(c) Char.GetUnicodeCategory(c) = UnicodeCategory.PrivateUse)
のようにすれば、ループ処理させずに判定できますね。
2005 以下においては拡張メソッドが使えませんが、その場合でも
Dim hasGaiji As Boolean = Regex.IsMatch(Z1, "\p{IsPrivateUseArea}")
のように、正規表現で判定することができます。
http://msdn.microsoft.com/ja-jp/library/20bw873z.aspx
# Regex.IsMatch(Z1, "\p{Co}") でも可。
ツイート | ![]() |