- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 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/
我是一名优秀的程序员,十分优秀!