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:"中國語"→国の字が繁体字に変更される。语が繁体字に変更される。
一応これでうまくいくんじゃないでしょうかね。