【问题标题】:How to check if characters exist that will be converted to "?" with GetBytes(string)如何检查是否存在将转换为“?”的字符使用 GetBytes(字符串)
【发布时间】:2011-12-11 06:57:42
【问题描述】:

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

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

这是我想要完成的一个简单示例(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 的字符,我需要抛出一个错误。现在它似乎只是放入了一个 ?如果源中的字符不存在。有什么方法可以验证字符是否存在于目标代码页中?

【问题讨论】:

    标签: .net unicode character-encoding ssis


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我创建了一个编码实例,设置了回退属性,它工作了! Dim E As Encoding = encoding.GetEncoding(1252, New EncoderExceptionFallback(), New DecoderExceptionFallback())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2020-11-29
    • 2011-07-30
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    相关资源
    最近更新 更多