異邦人になってみた~上海の人 

読者です 読者をやめる 読者になる 読者になる

異邦人になってみた~上海の人 

上海在住です。中国時代劇をよく見ています、中国旅行の事、weiboやQQの設定、一眼レフカメラの写真掲載、上海での日々の生活情報を書いています

 記事一覧表示
スポンサーリンク

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

プログラム 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:"中國語"→の字が繁体字に変更される。繁体字に変更される。


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