gpt4 book ai didi

日语 Windows 操作系统上的 C# 应用程序 - 将拉丁语显示为全角字符

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:19 25 4
gpt4 key购买 nike

我有一个 C# winform 应用程序,它安装在日文 windows 7 上。一些标签以非常宽的字体显示,导致它们无法匹配 from 的大小。

经过一些研究,我被告知这可能是半角/全角问题。有没有办法强制所有字符串显示为半宽?

例如这部分显示不正确:

modelSizeLabel.Text = String.Format("X:{0:0.0},Y:{1:0.0},Z:{2:0.0} [{3}]", 
(Model.BBox.dx),
(Model.BBox.dy),
(Model.BBox.dz - Model.Sink),
uc.To.ToString() //units enum
);

最佳答案

基本上我知道有两种处理全角字母的方法:

<强>1。使用 String.Normalize()方法

此方法使用标准 Unicode normalization forms将全角 (zenkaku) 转换为半角 (hankaku) 时:

public static string ToHalfWidth(string fullWidth)
{
return fullWidth.Normalize(System.Text.NormalizationForm.FormKC);
}

注意:这被认为是转换用日语 IME 编写的 ANSI 编码涵盖的字母、数字和标点符号的最简单方法,但我仍然不知道它如何影响任何假名/汉字字母。

<强>2。使用P/Invoke调用kernel32.dll中的LCMapString方法

此方法需要使用 API method LCMapString 调用外部 DLL 资源 kernel32.dll , 标志在 LCMapStringEx 中定义函数(注意一些标志是相互排斥的,实现归功于 rshepp/John Estropia):

// edited from /a/40836235
private const uint LOCALE_SYSTEM_DEFAULT = 0x0800;
private const uint LCMAP_HALFWIDTH = 0x00400000;

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

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

使用示例:

// by default Japanese IME automatically convert all vocal letters to respective kana letters, 
// so I used consonants except "n"
Label1.Text = ToHalfWidth("0123456789bcdfghjklmpqrstvwxyz");
Label2.Text = ToHalfWidth("0123456789bcdfghjklmpqrstvwxyz", 256);

PS:您可以将上述两种方法包装在帮助程序/服务类中,以便在同一命名空间中使用。

相关问题:

Converting zenkaku characters to hankaku and vice-versa in C#

Convert single byte character string (half width) to double byte (full width)

关于日语 Windows 操作系统上的 C# 应用程序 - 将拉丁语显示为全角字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43753954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com