PDA

View Full Version : Không đọc được ký tự đặc biệt lưu trong file!!!



chep_chep
07-11-2004, 13:08
Chào các bác:

Mình đã sử dụng phương thức đọc byte (ReadByte) của BinaryReader, nhưng khi xuất ra trên listbox thì hiện ra những hình vuông nhỏ và hình chữ nhật tô đen, giống như những chữ không xác định được khi mở một file định dạng khác trong Word. Các bác có ai biết làm cách nào convert đuợc chúng nó sang human readable words không, giúp mình với!!!

Mình đã sử dụng cả system.text.encoding.unicode trong lúc mở file mà vẫn không được.

Xin cám ơn các bác trước!

KEM_WALL
08-11-2004, 11:48
bạn không gửi code nên mình không biết bạn viết đúng hay sai. bạn nên kiểm tra 1 số điều sau đây
1> kiểm tra xem bạn lưu có đúng không. vd mở note pad lên xem
2> nếu bạn viết code đọc file đúng. thì bạn nên xem lại font của listbox

chep_chep
09-11-2004, 20:56
Hi KemWall

Cám ơn bạn nhé. Nhưng mình đã chech font của list box rùi. Mở bằng notepad cũng không nhận ra những ký tự đó. Mình không đọc file text bình thường đâu. Mình đang viết chương trình đọc file DICOM (.dcm) Chính xác là header information của nó.

Mình gửi cho bạn sub sau nhé:

Private Sub GetFile(ByVal filePath As String)
Dim fss As FileStream

Try
fss = New FileStream(filePath, FileMode.Open, FileAccess.Read)
Dim bw As New BinaryReader(fss, system.Text.Encoding.BigEndianUnicode)
Dim byt() As Byte

byt = bw.ReadBytes(fss.Length)
Dim byt2() As Byte
Dim i, j As Integer




TextBox1.Text = "The first 128 byte: "
For i = 0 To 127
TextBox1.Text &= Convert.ToChar(byt(i))
Next

TextBox1.Text &= " Preamble: "
For i = 128 To 131
TextBox1.Text &= Convert.ToChar(byt(i))
Next
TextBox1.Text &= " Tag1:"
For i = 132 To 135
TextBox1.Text &= byt(i) ' 2000
Next

Dim str1 As String = toBIN_BYTE(byt(132))
MessageBox.Show(str1)

Dim strReverse As String

For i = str1.Length - 1 To 0 Step -1
strReverse &= str1.Chars(i)
Next
MessageBox.Show(strReverse)
TextBox1.Text &= " Value Representation: "
For i = 136 To 137
TextBox1.Text &= Convert.ToChar(byt(i)) 'VR
Next
TextBox1.Text &= " Value Length: "
For i = 138 To 139
TextBox1.Text &= byt(i) 'VR
Next
TextBox1.Text &= " Value Field: "
For i = 140 To 179
TextBox1.Text &= Convert.ToChar(byt(i))
Next

Catch e As Exception
Label2.Text = "Error opening file " & " Error{0}" & e.Message
End Try

End Sub

Cám ơn sự giúp đở của bạn.

White Rose
10-11-2004, 12:50
Có những kí tự đặc biệt bạn không thể hiện trên vùng soạn thảo được, chẳng hạn kí tự xóa lùi (#8), kí tự rung chuông (#7), kí tự escape (#0)... Vì thế nó sẽ hiển thị lạ lùng như bạn thấy.

chep_chep
10-11-2004, 18:20
HI whiterose

Cám ơn sự giúp đỡ của bạn. Nhưng file mà mình đọc chỉ lưu thông tin thui. Mà đó là những thông tin cần thiết để xác định dữ liệu. Ví dụ như: trong file sẽ có những tag {0002,0078} dùng để định nghĩ Tranfer Syntax ID. Nhưng không hiểu sau mình không hiển thị chúng được.

xin cám ơn các bạn đã giúp đỡ.

KEM_WALL
11-11-2004, 16:02
bạn đọc file theo kiểu binary. for int i từ 0-127 byte. mà 1 kí tự unicode lưu bao nhiêu byte bạn biết không :D, ngắt giữa chừng của kí tự thì làm sau nó đọc được :D

QuanN
19-02-2005, 10:45
Khi read/write Unicode text file, bạn phải dùng cùng 1 Unicode encoding với StreamReader/StreamWriter. Xem thí dụ trong VietPad.NET (http://vietpad.sf.net/).