【问题标题】:vb.net console readline using specific encoding使用特定编码的 vb.net 控制台读取行
【发布时间】:2013-09-05 14:54:31
【问题描述】:

如何设置 .NET 控制台应用程序读取输入文件的编码?

我有一个 UTF16 文件,当我调用 Console.ReadLine 时,很明显没有正确观察到编码。来自该调用的字符串看起来很糟糕。

Sublime Text 2 报告文件编码为:

UTF-16 LE with BOM

代码如下:

    pstrLine = Console.ReadLine() //bad line here

    Do
        pactHandler(pstrLine)
        pstrLine = Console.ReadLine()
    Loop Until pstrLine Is Nothing

一行回来了,我可以阅读它,但它并不完全正确。每个字符之间似乎都有一个空格。并且该行以不可打印的字符开头。

当我查看输入文件时,它看起来像:

MY DATA IS HERE

当它通过ReadLine进来时:

$M Y  D A T A  I S  H E R E

$ 代表不可打印的字符,看起来像一个块。

【问题讨论】:

  • 我猜你正在使用输入重定向。不要那样做,你不能用它可靠地检测文本编码。实际使用 StreamReader 打开文件。

标签: .net vb.net encoding console


【解决方案1】:

System.Console 类具有InputEncodingOutputEncoding 的属性。

使用UnicodeEncoding object whose constructor you provide two bools:大端和字节顺序标记为这些属性提供值。

Imports System.Text
Imports System.IO

Dim Utf16LeBom = New UnicodeEncoding(False, True)
Console.InputEncoding = Utf16LeBom
Console.OutputEncoding = Utf16LeBom
Console.ReadLine()

如果您继续修改代码以使用 StreamReader 从流中读取,则可以使用相同的 UnicodeEncoding 对象。

【讨论】:

  • 非常感谢您的时间和精力。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-07-11
  • 2012-07-14
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多