vb.net encoding.unicode.getbytes问题

时间:2017-10-27 12:04:53

标签: vb.net csv unicode encoding

我尝试使用vb.net(框架版本3.5)将数据从SQL Server数据库导出到压缩文件夹中的csv文件,以便传输给其他用户。一切正常,除非字段中的数据包含欧元符号或者从网页粘贴到文本字段时 - 然后输出csv似乎包含抛出csv解析器的空字符(包括Excel& #39; s)导致不应该出现换行符(我用双引号括起了多行的任何字段)。

我已将其追溯到文本中的某些字符,这些字符似乎令人不安.Coding.Unicode.GetBytes - 它用空字符替换它们。如果我使用可正常工作的Encoding.Default.GetBytes,那么我冒着使用不同代码页的发送方和接收方的风险以及接收方无法导入数据的可能性。

正如我所提到的,其中一个问题字符是欧元符号(chr(128)),其他包括chr(130到140)和chr(145到156)。

所以我现在所拥有的是:

 Dim b() As Byte = Text.Encoding.Default.GetBytes(itm.ItemText)

 pkgpart.GetStream().Write(b, 0, b.Length)

哪个有效,但首选:

 Dim b() As Byte = Text.Encoding.Unicode.GetBytes(itm.ItemText)

 pkgpart.GetStream().Write(b, 0, b.Length)

没有按'吨

为了让Unicode.Getbytes方法起作用,有人能告诉我我缺少的是什么吗?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

感谢Hans和dwilliss让我走上正轨。根据以下内容添加BOM并使用UTF-8使其正常工作。

Dim b() As Byte = Text.Encoding.UTF8.GetPreamble.Concat(Text.Encoding.UTF8.GetBytes(itm.ItemText)).ToArray
pkgpart.GetStream().Write(b, 0, b.Length)

再次感谢