Go for fun

楽しい囲碁とプログラミング !
Go and easy programming for fun !

UTF-8でファイルをsaveし、そのままhtmlファイルとして出力する方法

その前に、unicodeとUTF-8/16/32の違いを理解しよう。
(1).文字集合 ? 表現したい文字の範囲(”あ”、”い”・・・といった文字の集合体)
(2).符号化方式 ? 文字集合を構成する個々の文字の表現方法(数値の振り方)
"あ"はUTF-8では、"30102"で、UTF-16では,"3042"だ。


世界中には日本語や英語、ドイツ語、中国語・・・など、大量の文字が存在する。これらの文字から表現したい文字の範囲(集合体)を定義する。これが(1)の文字集合だ。 次に(1)の個々の文字をコンピュータ上でどういった数値で表現するかを定義する。この数値の振り方が符号化方式(2)である。コンピュータはこの(2)で割り当てられた数値を用いて文字を表現する。 この文字集合と符号化方式を混合している方がよく居るが、この2つの考え方を理解すればUnicodeとUTF-8の違いも分かるだろう。
Unicodeは文字集合(1)であり、UTF-8は符号化方式(2)なのだ。
同じようにUnicode用の符号化方式としてUTF-16やUTF-32が存在する。 これらはUnicode文字集合に対する数値の振り方こそ違うものの、同じ文字集合から作られているから、表現できる文字の種類は同じなのだ。
ファイルをUTF-8で保存する方法

ここでは、Excel VBAでファイルを作り、UTF-8でセーブする方法を示す。
Visual Basic Editor のメニューから[ツール]→[参照設定]を選び,[参照可能なライブラリファイル]の中から "Microsoft ActiveX Data Objects x.x Library" にチェックを入れます。

Sub saveTest34()

   Dim t As String
   Dim t2 As String
   Dim stm As ADODB.Stream
   Set stm = New ADODB.Stream
   
   stm.Charset = "UTF-8"
   stm.LineSeparator = adLF
   stm.Open
 
   t = "あいうえお" & vbCrLf & "かきくけこ" & vbCrLf & "たちつてと"
   t2 = "さしすせそ" & vbCrLf & "かきくけこ" & vbCrLf & "たちつてと"
   
   stm.WriteText t, adWriteLine
   stm.WriteText t2, adWriteLine
   stm.SaveToFile "C:\text.txt", adSaveCreateOverWrite
   stm.Close

End Sub
上記はVBAでは、ファイル名C:\text.txtとして、中身は、
あいうえお 
かきくけこ
たちつてと
さしすせそ
かきくけこ
たちつてと
としてUTF-8で出力されます。



Sub notepp()

Dim j As Long
Dim k As Long
Dim kihu As String
Dim kihu0 As String
Dim kihu1 As String
Dim kihu2 As String
Dim name1 As String
Dim name2 As String

Dim kihu1add As String
Dim kihu2add As String
Dim name1add As String
Dim name2add As String
Dim filenameda As String
Dim dada As Long

Dim datFile As String
     
Dim wwws As Worksheet

Dim dada2 As String
Dim dada3 As String

Dim t As String
Dim t2 As String

Dim mess As String


   Dim stm As ADODB.Stream
   Set stm = New ADODB.Stream
   
   stm.Charset = "UTF-8"
   stm.LineSeparator = adLF
   stm.Open
   
Call kihutext

name1 = ""
name2 = ""
kihu0 = ""
kihu1 = ""
kihu2 = ""



     With Worksheets("Sheet1")
     
        dada = .Cells(44, 20).Value
        .Cells(44, 20).Value = dada + 1
        dada2 = str(dada)
        dada2 = Right(dada2, 3)
        dada3 = "\ll3" & dada2 & ".php"
        
        name1 = .Cells(35, 20)
        name2 = .Cells(36, 20)
        kihu0 = .Cells(33, 20)
        k = Len(kihu0)
            If k < 901 Then
                kihu1 = kihu0
                kihu2 = ""
            ElseIf k >= 901 Then
                kihu1 = Left(kihu0, 900)
                kihu2 = Mid(kihu0, 901, 1000)
            End If
     End With



Set wwws = ThisWorkbook.Worksheets("php")
t = ""
t2 = ""

datFile = "c:\workspace\lolipop\igo22" & dada3
 
' Open datFile For Output As #1
 
Dim i As Long
i = 1
Do While wwws.Cells(i, 1).Value <> ""


     t = wwws.Cells(i, 1).Value
     stm.WriteText t, adWriteLine
    
  '  Print #1, wwws.Cells(i, 1).Value
    i = i + 1
        If i = 88 Then
            t = "

" & name1 & "
" stm.WriteText t, adWriteLine t = name2 & "

" stm.WriteText t, adWriteLine i = i + 2 End If If i = 117 Then t = "var kihutext1 = " & """" & kihu1 & """" & ";" stm.WriteText t, adWriteLine t = "var kihutext2 = " & """" & kihu2 & """" & ";" stm.WriteText t, adWriteLine i = i + 2 End If Loop ' Close #1 stm.SaveToFile "c:\workspace\lolipop\igo22" & dada3 stm.Close mess = dada3 & "に書き出しました" MsgBox mess End Sub

上記ファイルは、予めExcelのworksheetに記述した内容の一部をプログラムで変更し、 htmlファイルをUTF-8で保存するマクロです。