最近我在C#应用程序中遇到了这段代码。
cDataString = Strings.StrConv(cDataString, VbStrConv.Wide);
我知道StrConv
是VB的字符串函数。您可以通过包含'using Microsoft.VisualBasic;'来调用它。
它应该将半宽日文字符转换为全宽字符。
我的问题是: 有没有办法实现相同的不使用VB函数和WITHOUT包括VB头,只使用标准的c#函数?我知道有很多c#字符串转换函数,其中一些可以从unicode转换为ansi,反之亦然等等。但我不确定其中任何一个是否会直接得到与上述VB相同的结果。那么,这可以在c#中完成吗?
感谢您的时间和精力。
更新: 我遇到了5年前被问到的this question。答案和讨论确实显示了可以采取的一些方法。我特别想知道的是,经过5年和新版本以及什么不是,在.NET中有一个更简单,更好的方法,而不依赖于VB函数或VB库?
答案 0 :(得分:2)
C#中没有等效功能。
如果您按照f2(new Dog)
Microsoft.VisualBasic.dll
的源代码进行操作,您会发现它实际上在内部调用StrConv
,类似于answer you linked }。
如果你不想引用LCMapString
,你可以将p / inv包装成一个用C#编写的帮助器类或服务,就像这样......
Microsoft.VisualBasic.dll
否则,您可以构建一个字典作为查找表。
答案 1 :(得分:0)
这不是通用解决方案,但在我的特殊情况下(半角日文片假名ラーメン
到全角片假名ラーメン
),String#Normalize
带有NFKC选项可以完成工作。
该方法与VB one不兼容(例如,它将全角数字42
转换为半角数字42
),因此您需要选择characters来替换,例如:
// Half-width katakana to Full-width katakana
cDataString = new Regex(@"[\uFF61-\uFF9F]+").Replace(cDataString, (m) => m.Value.Normalize(NormalizationForm.FormKC));