【发布时间】:2012-08-02 21:25:56
【问题描述】:
我在 VB.net 中有一个字符串,它可能包含以下内容:
这是一个 0x000020AC 符号
根据本文http://www.fileformat.info/info/unicode/char/20ac/index.htm,这是欧元符号的UTF-32编码
我想把它转换成
这是一个€符号
我尝试在 VB.net 中使用 UnicodeEncoding() 类(Framework 2.0,因为我正在修改旧版应用程序)
当我使用这个类编码,然后解码时,我仍然得到原始字符串。
我希望 UnicodeEncoding 能够识别已经编码的部分,而不是对其进行编码。但似乎并非如此。
对于如何将混合编码字符串转换为普通字符串,我现在有点迷茫。
背景:将 Excel 电子表格保存为 CSV 时,ascii 范围之外的任何内容都会转换为 ?。所以我的想法是,如果我能让我的客户搜索/替换一些字符,比如欧元符号,变成一个编码字符串,比如 0x000020AC。然后我希望在插入 SQL 数据库之前将这些编码部分转换回真实的符号。
我试过这样的功能
Public Function Decode(ByVal s As String) As String
Dim uni As New UnicodeEncoding()
Dim encodedBytes As Byte() = uni.GetBytes(s)
Dim output As String = ""
output = uni.GetString(encodedBytes)
Return output
End Function
这是基于 MSDN http://msdn.microsoft.com/en-us/library/system.text.unicodeencoding.aspx 上的示例
这可能是我完全误解了它在 VB.net 中的工作原理。在 C# 中,我可以简单地使用转义字符,例如“\u20AC”。但在 VB.net 中不存在这样的东西。
【问题讨论】:
-
我会使用Regex.Replace 匹配
0x...并使用自定义匹配评估器将匹配的值转换回字符。