如何用VB.net 读写Unicode编码的文本

就是有这么一个文件里面包括英文和日文编码是Shift-JIS我用VB.net要把这个文件写进一个字符串数组(是做词法分析用)就是把每个单词做为一个String存到句子(l... 就是有这么一个文件 里面包括英文和日文 编码是Shift-JIS 我用VB.net要把这个文件写进一个字符串数组(是做词法分析用) 就是把每个单词做为一个String 存到 句子(line,str)这样一个二维数组。

我用的方法:
r = IO.File.OpenRead(strIN)

r.Seek(i, IO.SeekOrigin.Begin)

s = r.ReadByte

然后让 word = word + Chr(s)

目前读英文没问题。 但是读中文 和 日文的时候,源文件中的日文或者中文部分 完全乱码。

请问怎么解决呢,我也试过ChrW() 还是乱码。

源码如下:
sub AA(ByVal strIN, ByVal strOUT)
Dim r As System.IO.Stream '读流
Dim w As System.IO.StreamWriter '写流
Dim s As Byte '字符串
Dim word As String '词法,单词
Dim fl As Long '文件长度
Dim i As UInteger '文件指针
Dim 句(50000, 20) As String '词法分析用数组,核心
Dim 行 = 1
Dim 词 = 1
Dim x = 1 '暂存变量
Dim y = 1 '暂存变量

fl = FileLen(strIN) '取文件长度
w = IO.File.AppendText(strOUT)
r = IO.File.OpenRead(strIN)
word = ""
Do Until i = fl

r.Seek(i, IO.SeekOrigin.Begin)
s = r.ReadByte '顺序读取文件

If Chr(s) = " " Then '遇空格则处理word,此时word为一完整单词

If word <> "" Then
句(行, 词) = word 'word写入字符串数组
词 = 词 + 1
word = ""
End If

ElseIf s = 13 Then '与回车的处理
句(行, 词) = word
行 = 行 + 1
词 = 1
word = ""
Else

word = word + Chr(s)
End If
i = i + 1
Loop
r.Close()
MsgBox("文件读入完成")

Do Until x = 行 + 1 '将字符串数组中的内容写入一个文件
Do Until 句(x, y) = ""
w.Write(句(x, y))

If 句(x, y + 1) <> "" Then
w.Write(" ")
End If
y = y + 1
Loop
w.Write(Chr(13))
x = x + 1
y = 1
Loop
w.Close()
MsgBox("文件写入完成")
End Sub
非常非常非常非常感谢jyh_jack,

我写了这么一段
dim arr(100) as String
arr = Split(r.ReadLine, " ")

Do Until i = 90
If arr(i) <> "" Then '不为空则显示字符串,为空则跳过
MsgBox(arr(i))
End If
i = i + 1
Loop
r.Close()

但是总是报错 这是咋回事
展开
 我来答
jyh_jack
2008-04-11 · TA获得超过4195个赞
知道大有可为答主
回答量:2080
采纳率:100%
帮助的人:2829万
展开全部
不要用do until,用for:

Dim arr() As String, i As Integer
arr = Split(r.ReadLine, " ")
For i = LBound(arr) To UBound(arr)
MsgBox(arr(i))
Next
--------------------
还是用readline,如果你要提取两个非连续空格之间的字符串,可以用
Dim arr() As String
arr = Split(r.ReadLine, " ")
arr()数组里就存了你要的单词。

快要下班了,明后天不上班,如果16:30之前还搞不定就要下个星期1了。

----------------------------------
哈,是我的失误没想到还有可能有半角的日文。
用utf-8就OK了,代码如下:
(文本文件存的时候不能存成ansi,要存成utf-8,或是Unicode)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim r As System.IO.StreamReader
r = New System.IO.StreamReader("c:\a.txt", System.Text.Encoding.GetEncoding("utf-8"))
Do While Not r.EndOfStream
MsgBox(r.ReadLine)
Loop
End Sub
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式