如何检查是否存在将转换为“?”的字符使用GetBytes(字符串)

时间:2011-10-19 20:46:10

标签: .net unicode character-encoding ssis

我正在为SSIS 2005脚本组件编写一段代码来从informix数据库中读取数据(数据库字符串存储为UTF8)。

此字符串的输出需要加载到文本流(DT_TEXT),使用代码页1252(ANSI - Latin I)进行编码。

这是我想要完成的一个简单示例(AllColumnsBuffer是脚本组件输出缓冲区,ColumnText是我正在加载的DT_TEXT字段的名称。)

        Dim s As String = "Testing,1,2,3" & System.Text.RegularExpressions.Regex.Unescape("\u4EB5")
        AllColumnsBuffer.AddRow()
        AllColumnsBuffer.ColumnText.AddBlobData(encoding.GetEncoding(1252).GetBytes(s))

如果编码找到无法转换为1252的字符,我需要抛出一个错误。现在它似乎只是放入一个?如果源中的字符不存在。有没有办法验证目标代码页中是否存在该字符?

1 个答案:

答案 0 :(得分:2)

您可以创建一个新编码,然后将EncoderFallback属性设置为您自己的回退,或者如果异常对您来说足够好,那么您可以使用EncoderExceptionFallback。你自己的后备可能(比方说)没有例外地优雅地失败,但设置一个标志告诉你它失败了。