異邦人になってみた~~上海生活写真ブログ

中国上海市在住です。もう10年を超えました。休日は星空(天の川)撮影やポートレート撮影等、連休時はカメラを持って中国各地を旅行してます。最近は内モンゴル自治区によく行っています。

 このブログについて(about)
  中国旅行/観光/写真記事一覧(省別)

C#で繁体字を簡体字に変換する方法

C#繁体字簡体字に変換する方法
中国大陸では簡体字を使っています。
グーグルMAP使ってたら文字が繁体字ででてくる?ので無理やり簡体字にすることにしました。
(MAPの表示は簡体字出ててるんですが、検索した住所が繁体字で出てくる)
繁体字簡体字に変換する方法とその逆で、簡体字繁体字にする方法です。

最初はStrConvを使って簡単にやろうと思いましたがこれがどうもうまくいかない
後、VBの関数を使うってのがなんか嫌ですね。
Microsoft.VisualBasic.Strings.StrConv("中国語", Microsoft.VisualBasic.VbStrConv.SimplifiedChinese, 0x411);
この関数を使ってみると文字化け?
というか「?」になってしまいます。
VBの自体のものだとしたらUTF-8には対応してないってことなんでしょうかね???


ということでLCMapStringというAPIを使えばできるみたいです。


private const int LOCALE_SYSTEM_DEFAULT = 0x0800;
private const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
private const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;

[System.Runtime.InteropServices.DllImport("kernel32",
CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]

private static extern int LCMapString(int Locale,
int dwMapFlags,
string lpSrcStr,
int cchSrc,
string lpDestStr,
int cchDest);


/// 簡体字に変換
public static string TraditionalToSimplified(string strString)
{
String target = new String(' ', strString.Length);
int ret = LCMapString(LOCALE_SYSTEM_DEFAULT,
LCMAP_SIMPLIFIED_CHINESE,
strString, strString.Length, target, strString.Length);
return target;
}

/// 繁体字に変換
public static string SimplifiedToTraditional(string strString)
{
String target = new String(' ', strString.Length);
int ret = LCMapString(LOCALE_SYSTEM_DEFAULT,
LCMAP_TRADITIONAL_CHINESE,
strString, strString.Length, target, strString.Length);
return target;
}

string kantai = TraditionalToSimplified("中国語");//----1日本語で入れてみる
string hantai = SimplifiedToTraditional("中国语");//----2中国語(簡体)で入れてみる

結果↓
1:"中国"→の字が簡体字に変更される
2:"中國語"→の字が繁体字に変更される。繁体字に変更される。


一応これでうまくいくんじゃないでしょうかね。