変なエンコーディングの変換

このコミットが含まれているのは:
守矢諏訪子 2024-04-10 15:12:59 +09:00
コミット f45290221e
3個のファイルの変更63行の追加9行の削除

2
go.mod
ファイルの表示

@ -3,3 +3,5 @@ module gitler.moe/suwako/hozonsite
go 1.20
require gitler.moe/suwako/goliblocale v1.0.0
require golang.org/x/text v0.14.0 // indirect

2
go.sum
ファイルの表示

@ -1,2 +1,4 @@
gitler.moe/suwako/goliblocale v1.0.0 h1:QiQKNzdgpavwmAaYhAb5pth0I6qS8IJ7q2hYAgpXacU=
gitler.moe/suwako/goliblocale v1.0.0/go.mod h1:pdv9Go5taevY8ClBOA+oLXjGap7G1RmIVKUMF8HSJmU=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=

ファイルの表示

@ -5,7 +5,11 @@ import (
"fmt"
"net/http"
"io"
"regexp"
"strings"
"golang.org/x/text/encoding/japanese"
"golang.org/x/text/transform"
)
// URLでパラメートル(?、=等)がある場合
@ -22,7 +26,8 @@ func Getpage (url string, path string) {
fmt.Println("CURLエラー", err)
return
}
defer curl.Body.Close() // ソフトの終了する時に実行する
// ソフトの終了する時に実行する
defer curl.Body.Close()
// ページの内容を読み込む
body, err2 := io.ReadAll(curl.Body)
@ -31,17 +36,62 @@ func Getpage (url string, path string) {
return
}
// 空index.htmlファイルを創作する
fn, err3 := os.Create(path + "/index.html")
if err3 != nil {
fmt.Println("ファイルの創作エラー:", err3)
// Content-TypeヘッダーはUTF-8又は駄目のエンコーディングかの確認
checkJis := `(?i)<meta.*?charset=(["']?)shift[_-]?jis`
jisRegex, errr := regexp.Compile(checkJis)
if errr != nil {
fmt.Println(errr)
return
}
defer fn.Close() // ソフトの終了する時に実行する
checkEuc := `(?i)<meta.*?charset=(["']?)euc[_-]?jp`
eucRegex, erre := regexp.Compile(checkEuc)
if erre != nil {
fmt.Println(erre)
return
}
// 文字エンコーディングを変換する
if jisRegex.Match(body) {
shiftJISDecoder := japanese.ShiftJIS.NewDecoder()
utf8Reader := transform.NewReader(
strings.NewReader(string(body)),
shiftJISDecoder,
)
utf8Body, err3 := io.ReadAll(utf8Reader)
if err3 != nil {
fmt.Println("文字エンコーディング変換エラー:", err3)
return
}
body = utf8Body
} else if eucRegex.Match(body) {
eucJPDecoder := japanese.EUCJP.NewDecoder()
utf8Reader := transform.NewReader(
strings.NewReader(string(body)),
eucJPDecoder,
)
utf8Body, err3 := io.ReadAll(utf8Reader)
if err3 != nil {
fmt.Println("文字エンコーディング変換エラー:", err3)
return
}
body = utf8Body
}
// 空index.htmlファイルを創作する
fn, err4 := os.Create(path + "/index.html")
if err4 != nil {
fmt.Println("ファイルの創作エラー:", err4)
return
}
// ソフトの終了する時に実行する
defer fn.Close()
// あのindex.htmlファイルに内容をそのまま書き込む
_, err4 := fn.WriteString(string(body))
if err4 != nil {
fmt.Println("ファイル書込エラー:", err4)
_, err5 := fn.WriteString(string(body))
if err5 != nil {
fmt.Println("ファイル書込エラー:", err5)
}
}