gpt4 book ai didi

c# - 将单字节字符串(半角)转换为双字节(全角)

转载 作者:行者123 更新时间:2023-11-30 23:18:32 27 4
gpt4 key购买 nike

最近我在 C# 应用程序中看到这段代码。

cDataString = Strings.StrConv(cDataString, VbStrConv.Wide);

据我所知,StrConv 是VB 的字符串函数。您可以通过包含“using Microsoft.VisualBasic;”来调用它。

它应该将半角日文字符转换为全角字符。

我的问题是:有没有一种方法可以在不使用 VB 函数并且不包括 VB 头文件的情况下仅使用标准的 c# 函数来实现相同的目的?我知道有很多 c# 字符串转换函数,其中一些可以从 unicode 转换为 ansi,反之亦然等等。但我不确定其中任何一个是否会直接获得与上述 VB 完全相同的结果。那么,这可以在 C# 中完成吗?

感谢您的时间和努力。

更新:我遇到了this question这是5年前问的。答案和讨论确实显示了一些可以完成的方法。我特别想知道的是,在 5 年和新版本之后,是否有更简单更好的方法在 .NET 中执行此操作而不依赖于 VB 函数或 VB 库?

最佳答案

C# 中没有等效函数。

如果您遵循 Microsoft.VisualBasic.dllStrConv 的源代码,您会看到它实际上 p/invokes LCMapString内部类似于 answer you linked .

如果您不想引用 Microsoft.VisualBasic.dll,您可以将 p/invoke 包装到用 C# 编写的帮助程序类或服务中,如下所示...

// NOTE: CODE NOT TESTED
// Code from John Estropia's StackOverflow answer
// https://stackoverflow.com/questions/6434377/converting-zenkaku-characters-to-hankaku-and-vice-versa-in-c-sharp

public static class StringWidthHelper
{
private const uint LOCALE_SYSTEM_DEFAULT = 0x0800;
private const uint LCMAP_HALFWIDTH = 0x00400000;
private const uint LCMAP_FULLWIDTH = 0x00800000;

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();
}

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();
}

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

否则,您可以构建一个字典来充当查找表。

关于c# - 将单字节字符串(半角)转换为双字节(全角),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835855/

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