VB.net : テキストファイルとキャラクタセット

  ダウンロードと概要



ブラウザでダウンロード

テキストファイルに日本語が記述されている場合、その日本語のキャラクタセットは様々で、
通常テキストエディタで使われている種類だけでも以下のようになります。

キャラクタセット

■ SHIFT_JIS
■ UTF-8( BOM あり )
■ UTF-8( BOM なし )
■ EUC-JP
■ UNICODE
■ JIS


VB.net の内部コードは UNICODE なので、それら変換してメモリに置かないと、正しく
日本語として読む事ができません。そして、その役割は、System.Text.Encoding クラス
が受け持つこととなります。その相互変換の基本コードを、Byte 配列を使う方法も含めて
列挙しています


実行結果の表示
  
vb.net>text
SHIFT_JIS から読んだものと、UTF-8 から読んだものは同じです
UTF8(BOM) から読んだものと、UTF8N から読んだものは同じです
UTF8N から読んだものと、EUC-JP から読んだものは同じです
EUC-JPから読んだものと、UNICODE から読んだものは同じです
StreamReader から読んだものと、FileStream から読んだものは同じです
1961
1869
-------------------------------------
************************************************************
*【実行方法】
************************************************************
__buildPath.txt に SDK用の正しいパスが必要ですが、だいたいに
おいて、Framework2.0 がインストールされておれば変更する必要
-------------------------------------
************************************************************
*【実行方法】
************************************************************
__buildPath.txt に SDK用の正しいパスが必要ですが、だいたいに
おいて、Framework2.0 がインストールされておれば変更する必要
-------------------------------------
************************************************************
*【実行方法】
************************************************************
__buildPath.txt に SDK用の正しいパスが必要ですが、だいたいに
おいて、Framework2.0 がインストールされておれば変更する必要
-------------------------------------
  

関連する記事

VB.net : String、Char()、Byte() の相互変換






  ソースコード



001.' ********************************************************
002.' ■ テキストファイルの処理
003.' ********************************************************
004.Imports System.IO
005.Imports System.Text
006. 
007.Module MyModule
008. 
009.' ********************************************************
010.' VB.net 内は Unicode ですから、それを中心に考えます
011.' 左側がファイルで、右側がメモリです
012.' ********************************************************
013.Sub Main()
014. 
015.    ' ********************************************************
016.    ' =============        =============
017.    ' | SHIFT_JIS |   =>   |  UNICODE  |
018.    ' =============        =============
019.    ' ********************************************************
020.    Dim SJISFileIn As StreamReader = New StreamReader( "readme.txt", Encoding.GetEncoding(932) )
021.    ' 全て読み込む
022.    Dim Text1 As String = SJISFileIn.ReadToEnd()
023.    ' 閉じる
024.    SJISFileIn.Close()
025.    SJISFileIn.Dispose()
026. 
027. 
028.    ' ********************************************************
029.    ' =============        =============
030.    ' | UTF8(BOM) |   <=   |  UNICODE  |
031.    ' =============        =============
032.    ' ********************************************************
033.    ' BOM あり
034.    Dim UTF8BOM As UTF8Encoding = New UTF8Encoding(True)    ' Encoding.UTF8 と同等
035.    ' 第二引数 : False で上書き、True ならば追加
036.    Dim UTF8FileOut As StreamWriter = New StreamWriter( "readme_utf8.txt", False, UTF8BOM )
037.    UTF8FileOut.Write( Text1 )
038.    UTF8FileOut.Close()
039.    UTF8FileOut.Dispose()
040. 
041. 
042.    ' ********************************************************
043.    ' =============        =============
044.    ' | UTF8(BOM) |   =>   |  UNICODE  |
045.    ' =============        =============
046.    ' ********************************************************
047.    Dim UTF8FileIn As StreamReader = New StreamReader( "readme_utf8.txt", UTF8BOM )
048.    ' 全て読み込む
049.    Dim Text2 As String = UTF8FileIn.ReadToEnd()
050.    ' 閉じる
051.    UTF8FileIn.Close()
052.    UTF8FileIn.Dispose()
053. 
054. 
055.    ' ********************************************************
056.    ' 内部表現の Unicode で 同じものとなります
057.    ' ********************************************************
058.    if Text1 = Text2 then
059.        Console.WriteLine("SHIFT_JIS から読んだものと、UTF-8 から読んだものは同じです")
060.    end if
061. 
062. 
063.    ' ********************************************************
064.    ' UTF8N は 先頭に BOM がありません
065.    ' UTF8Encoding のデフォルトの状態です
066.    ' =============        =============
067.    ' |   UTF8N   |   <=   |  UNICODE  |
068.    ' =============        =============
069.    ' ********************************************************
070.    ' BOM なし
071.    Dim UTF8noBOM As UTF8Encoding = New UTF8Encoding()
072.    ' 第二引数 : False で上書き、True ならば追加
073.    Dim UTF8NFileOut As StreamWriter = New StreamWriter( "readme_utf8n.txt", False, UTF8noBOM )
074.    UTF8NFileOut.Write( Text1 )
075.    UTF8NFileOut.Close()
076.    UTF8NFileOut.Dispose()
077. 
078. 
079.    ' ********************************************************
080.    ' =============        =============
081.    ' |   UTF8N   |   =>   |  UNICODE  |
082.    ' =============        =============
083.    ' ********************************************************
084.    Dim UTF8NFileIn As StreamReader = New StreamReader( "readme_utf8n.txt", UTF8noBOM )
085.    ' 全て読み込む
086.    Dim Text3 As String = UTF8NFileIn.ReadToEnd()
087.    ' 閉じる
088.    UTF8NFileIn.Close()
089.    UTF8NFileIn.Dispose()
090. 
091.    ' ********************************************************
092.    ' 内部表現の Unicode で 同じものとなります
093.    ' ********************************************************
094.    if Text2 = Text3 then
095.        Console.WriteLine("UTF8(BOM) から読んだものと、UTF8N から読んだものは同じです")
096.    end if
097. 
098. 
099.    ' ********************************************************
100.    ' =============        =============
101.    ' |   EUC-JP  |   <=   |  UNICODE  |
102.    ' =============        =============
103.    ' ********************************************************
104.    Dim EUCJP As Encoding = Encoding.GetEncoding(51932)
105.    ' 第二引数 : False で上書き、True ならば追加
106.    Dim EUCJPFileOut As StreamWriter = New StreamWriter( "readme_eucjp.txt", False, EUCJP )
107.    EUCJPFileOut.Write( Text3 )
108.    EUCJPFileOut.Close()
109.    EUCJPFileOut.Dispose()
110. 
111. 
112.    ' ********************************************************
113.    ' =============        =============
114.    ' |  EUC-JP   |   =>   |  UNICODE  |
115.    ' =============        =============
116.    ' ********************************************************
117.    Dim EUCJPFileIn As StreamReader = New StreamReader( "readme_eucjp.txt", EUCJP )
118.    ' 全て読み込む
119.    Dim Text4 As String = EUCJPFileIn.ReadToEnd()
120.    ' 閉じる
121.    EUCJPFileIn.Close()
122.    EUCJPFileIn.Dispose()
123. 
124. 
125.    ' ********************************************************
126.    ' 内部表現の Unicode で 同じものとなります
127.    ' ********************************************************
128.    if Text3 = Text4 then
129.        Console.WriteLine("UTF8N から読んだものと、EUC-JP から読んだものは同じです")
130.    end if
131. 
132. 
133.    ' ********************************************************
134.    ' =============        =============
135.    ' |  UNICODE  |   <=   |  UNICODE  |
136.    ' =============        =============
137.    ' ********************************************************
138.    Dim UNICODE As Encoding = Encoding.Unicode
139.    ' 第二引数 : False で上書き、True ならば追加
140.    Dim UNICODEFileOut As StreamWriter = New StreamWriter( "readme_unicode.txt", False, UNICODE )
141.    UNICODEFileOut.Write( Text4 )
142.    UNICODEFileOut.Close()
143.    UNICODEFileOut.Dispose()
144. 
145. 
146.    ' ********************************************************
147.    ' =============        =============
148.    ' |  UNICODE  |   =>   |  UNICODE  |
149.    ' =============        =============
150.    ' ********************************************************
151.    Dim UNICODEFileIn As StreamReader = New StreamReader( "readme_unicode.txt", UNICODE )
152.    ' 全て読み込む
153.    Dim Text5 As String = UNICODEFileIn.ReadToEnd()
154.    ' 閉じる
155.    UNICODEFileIn.Close()
156.    UNICODEFileIn.Dispose()
157. 
158. 
159.    ' ********************************************************
160.    ' 内部表現の Unicode で 同じものとなります
161.    ' ********************************************************
162.    if Text4 = Text5 then
163.        Console.WriteLine("EUC-JPから読んだものと、UNICODE から読んだものは同じです")
164.    end if
165. 
166. 
167.    ' ********************************************************
168.    ' =============        =============
169.    ' | SHIFT_JIS |   <=   |  UNICODE  |
170.    ' =============        =============
171.    ' ********************************************************
172.    Dim SHIFTJIS As Encoding = Encoding.GetEncoding(932)
173.    ' 第二引数 : False で上書き、True ならば追加
174.    Dim SHIFTJISFileOut As StreamWriter = New StreamWriter( "readme_shiftjis.txt", False, SHIFTJIS )
175.    SHIFTJISFileOut.Write( Text5 )
176.    SHIFTJISFileOut.Close()
177.    SHIFTJISFileOut.Dispose()
178. 
179. 
180.    ' ********************************************************
181.    ' =============        =============        =============
182.    ' | SHIFT_JIS |   =>   |   Byte()  |   =>   |  UNICODE  |
183.    ' =============        =============        =============
184.    ' ********************************************************
185.    Dim fs As FileStream = New FileStream( "readme_shiftjis.txt", FileMode.Open )
186.    Dim fb As Byte() = New Byte( fs.Length ){}
187.    fs.Read( fb, 0, fs.Length )
188.    ' SHIFT_JIS で文字列化
189.    Dim Text6 As String = SHIFTJIS.GetString( fb, 0, fs.Length )
190.    fs.Close()
191.    fs.Dispose()
192. 
193.    ' ********************************************************
194.    ' 内部表現の Unicode で 同じものとなります
195.    ' ********************************************************
196.    if Text5 = Text6 then
197.        Console.WriteLine("StreamReader から読んだものと、FileStream から読んだものは同じです")
198.    end if
199. 
200. 
201.    ' ********************************************************
202.    ' =============        =============        =============
203.    ' |iso-2022-jp|   <=   |   Byte()  |   <=   |  UNICODE  |
204.    ' =============        =============        =============
205.    ' ********************************************************
206.    fb = Encoding.GetEncoding(50222).GetBytes(Text6)
207.    Dim fso As FileStream = New FileStream( "readme_jis.txt", FileMode.Create )
208.    fso.Write( fb, 0, fb.Length )
209.    fso.Close()
210.    fso.Dispose()
211. 
212. 
213.    ' ********************************************************
214.    ' 改行コードで分解する
215.    '
216.    ' 1) Windows では、CrLf なので、Cr を削除しておく
217.    ' 2) Lf で分割する
218.    ' ********************************************************
219.    Dim ByteCr As Byte() = New Byte() { 13 }
220.    Dim ByteLf As Byte() = New Byte() { 10 }
221. 
222.    ' 文字列としての Cr
223.    Dim repl As String = Encoding.ASCII.GetString(ByteCr)
224. 
225.    ' 置換前のテキストの量
226.    Console.WriteLine( Text5.Length )
227.    ' 置換
228.    Text5 = Text5.Replace( repl,"" )
229.    ' 置換後のテキストの量
230.    Console.WriteLine( Text5.Length )
231.    Console.WriteLine("-------------------------------------")
232. 
233.    ' 分割用のセパレータを作成 
234.    Dim separator As Char() = Encoding.ASCII.GetChars(ByteLf)
235.    ' 配列
236.    Dim lines As String()
237. 
238.    ' Lf で分割して配列を作成
239.    lines = Text5.Split( separator )
240. 
241.    Dim cnt As Integer = 0
242. 
243.    ' 一行づつ表示
244.    Dim line As String
245.    For Each line In lines
246.        cnt += 1
247.        if cnt > 5 then
248.            Exit For
249.        end if
250. 
251.        Console.WriteLine(line)
252.    Next
253.    Console.WriteLine("-------------------------------------")
254. 
255.    ' ********************************************************
256.    ' VB.net ではセパレータは文字列でも良い
257.    ' ********************************************************
258.    Dim separator2 As String = Encoding.ASCII.GetString(ByteLf)
259.    ' 文字列の Lf で分割して配列を作成
260.    lines = Text5.Split( separator2 )
261. 
262.    cnt = 0
263. 
264.    ' 一行づつ表示
265.    For Each line In lines
266.        cnt += 1
267.        if cnt > 5 then
268.            Exit For
269.        end if
270. 
271.        Console.WriteLine(line)
272.    Next
273.    Console.WriteLine("-------------------------------------")
274. 
275. 
276.    ' ********************************************************
277.    ' VB.net 用の名前空間にある定数でも良い
278.    ' ********************************************************
279.    lines = Text5.Split( Microsoft.VisualBasic.ControlChars.Lf )
280. 
281.    cnt = 0
282. 
283.    ' 一行づつ表示
284.    For Each line In lines
285.        cnt += 1
286.        if cnt > 5 then
287.            Exit For
288.        end if
289. 
290.        Console.WriteLine(line)
291.    Next
292.    Console.WriteLine("-------------------------------------")
293. 
294. 
295. 
296.End Sub
297. 
298.End Module










  infoboard   管理者用   





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ