微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将Unicode转义序列转换为.NETstring中的Unicode字符?

假设你已经将一个文本文件加载到一个string中,并且你希望将所有Unicode转义符转换成string内的实际Unicode字符。

例:

“以下是Unicode' u2320'中整数字符的上半部分,这是下半部分' U2321'。”

在线程中调用列表框

识别Windows机器上的空闲状态

WPF将html写入一个富文本框

如何使文本框始终显示variables值

将Visual Studio 2005 sln迁移到2008,在LIB环境variables中使用vc98path警告,如何解决

如何切换到具体的文件处理

错误MSB3147:找不到所需的文件“setup.bin”发布到本地失败

.NET:如何创build文件图标叠加

CLR之间的区别

与多个用户的WCF REST服务基本authentication

答案很简单,适用于至少有几千个字符的字符串。

例1:

Regex rx = new Regex( @"\[uU]([0-9A-F]{4})" ); result = rx.Replace( result,match => ((char) Int32.Parse(match.Value.Substring(2),NumberStyles.Hexnumber)).ToString() );

例2:

Regex rx = new Regex( @"\[uU]([0-9A-F]{4})" ); result = rx.Replace( result,delegate (Match match) { return ((char) Int32.Parse(match.Value.Substring(2),NumberStyles.Hexnumber)).ToString(); } );

一个示例显示使用lambda表达式(C#3.0)进行的替换,第二个示例使用应该与C#2.0一起使用的委托。

要打破这里发生的事情,首先我们创建一个正则表达式:

new Regex( @"\[uU]([0-9A-F]{4})" );

然后我们使用字符串“result”和一个匿名方法(第一个例子中的lambda表达式,第二个中的委托 – 委托也可以是常规方法调用Replace(),该方法转换字符串中的每个正则表达式。

Unicode转义处理是这样的:

((char) Int32.Parse(match.Value.Substring(2),NumberStyles.Hexnumber)).ToString(); });

获取表示转义的数字部分的字符串(跳过前两个字符)。

match.Value.Substring(2)

使用Int32.Parse()解析该字符串,该字符串采用Parse()函数应该预期的字符串和数字格式,在这种情况下是十六进制数字。

NumberStyles.Hexnumber

然后我们将结果编号转换为Unicode字符:

(char)

最后,我们在Unicode字符上调用ToString(),这个字符串表示是传递给Replace()的值。

.ToString()

注意:您可以使用match参数的GroupCollection和正则表达式中的子表达式来捕获数字('2320'),而不是使用Substring调用获取要转换的文本,但是这更复杂,可读性更差。

重构一点:

Regex regex = new Regex (@"\U([0-9A-F]{4})",RegexOptions.IgnoreCase); string line = "..."; line = regex.Replace (line,match => ((char)int.Parse (match.Groups[1].Value,NumberStyles.Hexnumber)).ToString ());

这是VB.NET的等价物:

Dim rx As New RegularExpressions.Regex("\[uU]([0-9A-Fa-f]{4})") result = rx.Replace(result,Function(match) CChar(ChrW(Int32.Parse(match.Value.Substring(2),Globalization.NumberStyles.Hexnumber))).ToString())

我想你最好把小字母加到你的正则表达式中。 它对我更好。

Regex rx = new Regex(@"\[uU]([0-9A-Fa-f]{4})"); result = rx.Replace(result,NumberStyles.Hexnumber)).ToString());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐