我正在VB.NET中进行数据库导入/导出过程,该过程将数据从MySQL(5.5)数据库写入纯文本文件。应用程序将数据读取到DataTable
,然后遍历行/列以将数据实际写入OutputFile
(System.IO.StreamWriter
对象)。该数据库中表的编码为Latin1
。我用来测试的一张表中有一个MediumBlob
字段,其中包含以字节数组形式存储的图像文件。
在尝试验证应用程序的输出时,我已经使用MySQL Workbench直接从数据库中导出了数据,然后将其与从应用程序中写入相同数据时得到的结果进行了比较。在从MySQL Workbench的直接导出中,我看到其中一些字节以反斜杠导出。但是,当我通过应用程序读取数据时,此转义字符不会出现。通过Notepad ++查看,它清楚地显示了两个输出结果之间的明显区别(请参见屏幕截图)。
很显然,尽管两者看起来非常相似,但两者并不完全相同。我的应用程序不包含转义字符的反斜杠,并且某些字符(例如NULL
)的输出方式完全不同。我将此字段写入文件的代码是:
OutputFile.Write("'" & System.Text.Encoding.GetEncoding(28591).GetString(CType(COPYRow(ColumnIndex), Byte())) & "'")
GetString
方法似乎没有允许我指定转义字符的重载,所以我想知道是否还有另一种方法可以使用此方法确保字符是正确编码,包括转义字符。
我“假设”当我开始使用PostgreSQL数据库时,这种方法通常也应该起作用,但是可能使用不同的编码。我正在尝试尽可能构建“通用”的东西,但我不得不担心在运行时指定编码,而不是稍后对其进行硬编码。
我只是遇到了另一个SO问题,这可能会指出正确的方向:Convert a Unicode string to an escaped ASCII string。显然,可能需要花费更多的时间才能将其正确设置,但这似乎与我要完成的工作最接近。