変なエンコーディングの変換
このコミットが含まれているのは:
コミット
f45290221e
2
go.mod
2
go.mod
|
@ -3,3 +3,5 @@ module gitler.moe/suwako/hozonsite
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
require gitler.moe/suwako/goliblocale v1.0.0
|
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 h1:QiQKNzdgpavwmAaYhAb5pth0I6qS8IJ7q2hYAgpXacU=
|
||||||
gitler.moe/suwako/goliblocale v1.0.0/go.mod h1:pdv9Go5taevY8ClBOA+oLXjGap7G1RmIVKUMF8HSJmU=
|
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"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"io"
|
"io"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"golang.org/x/text/encoding/japanese"
|
||||||
|
"golang.org/x/text/transform"
|
||||||
)
|
)
|
||||||
|
|
||||||
// URLでパラメートル(?、=等)がある場合
|
// URLでパラメートル(?、=等)がある場合
|
||||||
|
@ -22,7 +26,8 @@ func Getpage (url string, path string) {
|
||||||
fmt.Println("CURLエラー:", err)
|
fmt.Println("CURLエラー:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer curl.Body.Close() // ソフトの終了する時に実行する
|
// ソフトの終了する時に実行する
|
||||||
|
defer curl.Body.Close()
|
||||||
|
|
||||||
// ページの内容を読み込む
|
// ページの内容を読み込む
|
||||||
body, err2 := io.ReadAll(curl.Body)
|
body, err2 := io.ReadAll(curl.Body)
|
||||||
|
@ -31,17 +36,62 @@ func Getpage (url string, path string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 空index.htmlファイルを創作する
|
// Content-TypeヘッダーはUTF-8又は駄目のエンコーディングかの確認
|
||||||
fn, err3 := os.Create(path + "/index.html")
|
checkJis := `(?i)<meta.*?charset=(["']?)shift[_-]?jis`
|
||||||
if err3 != nil {
|
jisRegex, errr := regexp.Compile(checkJis)
|
||||||
fmt.Println("ファイルの創作エラー:", err3)
|
if errr != nil {
|
||||||
|
fmt.Println(errr)
|
||||||
return
|
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ファイルに内容をそのまま書き込む
|
// あのindex.htmlファイルに内容をそのまま書き込む
|
||||||
_, err4 := fn.WriteString(string(body))
|
_, err5 := fn.WriteString(string(body))
|
||||||
if err4 != nil {
|
if err5 != nil {
|
||||||
fmt.Println("ファイル書込エラー:", err4)
|
fmt.Println("ファイル書込エラー:", err5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
読み込み中…
新しいイシューから参照