如何检查是否存在将转换为“?”的字符与 GetBytes(字符串)
我正在为 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以创建一个新的编码,然后设置
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 useEncoderExceptionFallback
. Your own fallback might (say) fail gracefully without an exception, but set a flag to tell you afterwards that it failed.