在z#中将zenkaku字符转换为hankaku,反之亦然

yu_*_*nae 6 c# string format cjk

正如它在标题行中所说,我想将zenkaku字符转换为hankaku字符和C#中的副vrsa,但无法弄清楚如何做到这一点.所以,说"ラーメン"到"ラーメン",反之亦然.是否有可能在一种方法中编写它,根据输入的格式自动确定转换需要的方式?

Joh*_*pia 3

您可以通过包含对 Microsoft.VisualBasic.dll 的引用来使用Strings.StrConv()方法,也可以 p/调用LCMapString()本机函数:

private const uint LOCALE_SYSTEM_DEFAULT = 0x0800;
private const uint LCMAP_HALFWIDTH = 0x00400000;

public static string ToHalfWidth(string fullWidth)
{
    StringBuilder sb = new StringBuilder(256);
    LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_HALFWIDTH, fullWidth, -1, sb, sb.Capacity);
    return sb.ToString();
}

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
private static extern int LCMapString(uint Locale, uint dwMapFlags, string lpSrcStr, int cchSrc, StringBuilder lpDestStr, int cchDest);
Run Code Online (Sandbox Code Playgroud)

你也可以做相反的事情:

private const uint LCMAP_FULLWIDTH = 0x00800000;

public static string ToFullWidth(string halfWidth)
{
    StringBuilder sb = new StringBuilder(256);
    LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_FULLWIDTH, halfWidth, -1, sb, sb.Capacity);
    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

至于检测输入字符串的格式,我不知道不先进行转换并比较结果的简单方法。(如果字符串同时包含全角和半角字符怎么办?)