変なエンコーディングの変換
このコミットが含まれているのは:
コミット
f45290221e
2
go.mod
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
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)
|
||||
}
|
||||
}
|
||||
|
|
読み込み中…
新しいイシューから参照