将单字节字符串(半宽)转换为双字节(全宽)

时间:2016-11-28 01:16:33

标签: c# string string-conversion

最近我在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库?

2 个答案:

答案 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));