VB.NET中ChrW函数转换到汉字

 
'若使用Reflector,而且程序中有中文字符,Reflector会用代码表示。若反成C#,网上有很多解决方案了,而VB.net却找不到.
'VB.net里可能更复杂些,毕竟C#还是一个完整的字符串,而VB中却被拆成一个一个单字,然后用&连接
'下面这段代码解决了这个问题,将其拷到宏编辑器里保存即可
'写的有点傻傻的,懒得优化了,好使就行:)
 
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Text.RegularExpressions
Public Module Unicode2Character
    '必须手工选择到单字
    Public Sub 单字转换()
        Dim doc As Document = DTE.ActiveDocument
        Dim docText As TextDocument = doc.Object
        Dim selText As TextSelection = docText.Selection()
        Dim text As String = selText.Text
        Dim ch As Char = cc(text)
        docText.ReplacePattern(text, ch)
    End Sub
    '全部替换当前文件的汉字
    Public Sub 全部转换()
        Dim doc As Document = DTE.ActiveDocument
        Dim docText As TextDocument = doc.Object
        Dim selText As TextSelection = docText.Selection()
        selText.SelectAll()
        Dim text As String = selText.Text
        Dim iLength As Integer
        Do
            iLength = text.Length
            Dim m As Text.RegularExpressions.Match
            '先找“字符串”:ChrW(12345) & ChrW(23456) ... & ChrW(56789)
            Dim strPattern As String = "(ChrW\([0-9]{5}\)\s&\s)+ChrW\([0-9]{5}\)"
            m = Regex.Match(text, strPattern, RegexOptions.IgnoreCase)
            If m.Success Then
                Dim strMatch As String = m.Value
                Dim strValue As String = m.Value
                text = text.Replace(strValue, "")
                strValue = strValue.Replace("&", "")
                strValue = strValue.Replace(" ", "")
                strValue = strValue.Replace("ChrW(", "")
                strValue = strValue.Replace(")", "")
                Dim chars As Integer = strValue.Length()
                chars = chars \ 5
                Dim strNew As String = ""
                For i As Integer = 0 To chars - 1
                    Dim x As String = strValue.Substring(i * 5, 5)
                    strNew = strNew & ic(x)
                Next
                docText.ReplacePattern(strMatch, """" & strNew & """")
            Else
                Exit Do
            End If
            If Not text.Length < iLength Then
                Exit Do
            End If
        Loop

        selText.SelectAll()
        text = selText.Text
        Do
            iLength = text.Length
            Dim m As Text.RegularExpressions.Match
            '再找单字:" & ChrW(23456) & "
            Dim strPattern As String = "\""\s&\sChrW\([0-9]{5}\)\s&\s\"""
            m = Regex.Match(text, strPattern, RegexOptions.IgnoreCase)
            If m.Success Then
                Dim strMatch As String = m.Value
                Dim strValue As String = m.Value
                text = text.Replace(strValue, "")
                strValue = strValue.Replace("&", "")
                strValue = strValue.Replace(" ", "")
                strValue = strValue.Replace("ChrW(", "")
                strValue = strValue.Replace(")", "")
                strValue = strValue.Replace("""", "")
                Dim strNew = ic(strValue)
                docText.ReplacePattern(strMatch, strNew)
            Else
                Exit Do
            End If
            If Not text.Length < iLength Then
                Exit Do
            End If
        Loop

        selText.SelectAll()
        text = selText.Text
        Do
            iLength = text.Length
            Dim m As Text.RegularExpressions.Match
            '再找单字:" & ChrW(23456)
            Dim strPattern As String = "\""\s&\sChrW\([0-9]{5}\)"
            m = Regex.Match(text, strPattern, RegexOptions.IgnoreCase)
            If m.Success Then
                Dim strMatch As String = m.Value
                Dim strValue As String = m.Value
                text = text.Replace(strValue, "")
                strValue = strValue.Replace("&", "")
                strValue = strValue.Replace(" ", "")
                strValue = strValue.Replace("ChrW(", "")
                strValue = strValue.Replace(")", "")
                strValue = strValue.Replace("""", "")
                Dim strNew = ic(strValue)
                docText.ReplacePattern(strMatch, strNew & """")
            Else
                Exit Do
            End If
            If Not text.Length < iLength Then
                Exit Do
            End If
        Loop
 
        selText.SelectAll()
        text = selText.Text
        Do
            iLength = text.Length
            Dim m As Text.RegularExpressions.Match
            '再找单字:ChrW(23456) & "
            Dim strPattern As String = "ChrW\([0-9]{5}\)\s&\s\"""
            m = Regex.Match(text, strPattern, RegexOptions.IgnoreCase)
            If m.Success Then
                Dim strMatch As String = m.Value
                Dim strValue As String = m.Value
                text = text.Replace(strValue, "")
                strValue = strValue.Replace("&", "")
                strValue = strValue.Replace(" ", "")
                strValue = strValue.Replace("ChrW(", "")
                strValue = strValue.Replace(")", "")
                strValue = strValue.Replace("""", "")
                Dim strNew = ic(strValue)
                docText.ReplacePattern(strMatch, """" & strNew)
            Else
                Exit Do
            End If
            If Not text.Length < iLength Then
                Exit Do
            End If
        Loop
        selText.SelectAll()
        text = selText.Text
        Do
            iLength = text.Length
            Dim m As Text.RegularExpressions.Match
            '最后单字:ChrW(23456)
            Dim strPattern As String = "ChrW\([0-9]{5}\)"
            m = Regex.Match(text, strPattern, RegexOptions.IgnoreCase)
            If m.Success Then
                Dim strMatch As String = m.Value
                Dim strValue As String = m.Value
                text = text.Replace(strValue, "")
                strValue = strValue.Replace(" ", "")
                strValue = strValue.Replace("ChrW(", "")
                strValue = strValue.Replace(")", "")
                Dim strNew = ic(strValue)
                docText.ReplacePattern(strMatch, """" & strNew & """")
            Else
                Exit Do
            End If
            If Not text.Length < iLength Then
                Exit Do
            End If
        Loop
    End Sub
    Private Function cc(ByVal str As String) As Char
        Dim int As Integer = CInt(str.Substring(5, 5))
        Dim ch As Char = ChrW(int)
        Return ch
    End Function
    Private Function ic(ByVal int As Integer) As Char
        Dim ch As Char = ChrW(int)
        Return ch
    End Function

End Module

附:
可以进行charcode值与字符之间互相转换
http://www.geocities.com/george_ruban/charset/CharCode.html

希望能对大家有些帮助 emsmile.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值