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

发布于 2024-12-11 01:11:29 字数 562 浏览 0 评论 0原文

我正在为 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的字符,我需要抛出一个错误。看来现在它只是放入一个?如果源中的字符不存在。有什么方法可以验证目标代码页中是否存在该字符?

I am writing a piece of code for a SSIS 2005 script component to read data from an informix database (where the database strings are stored as UTF8).

The output of this string needs to be loaded to a text stream (DT_TEXT), encoded using code page 1252 (ANSI - Latin I).

Here's a simple example of what I am trying to accomplish (AllColumnsBuffer is the script component output buffer, ColumnText is the name of the DT_TEXT field I am loading).

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

I need to throw an error if the encoding finds characters that cannot be converted to 1252. It seems that now it just puts in a ? if a character in the source doesn't exist. Is there any way to validate that the character exists in the target code page?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苏辞 2024-12-18 01:11:30

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

You could create a new encoding and then set the EncoderFallback property - either to your own fallback, or if an exception is good enough for you then you can use EncoderExceptionFallback. Your own fallback might (say) fail gracefully without an exception, but set a flag to tell you afterwards that it failed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文