Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4096バイト以上の文字列をtransformできない時がある #7

Closed
shigetaichi opened this issue Dec 13, 2023 · 2 comments
Closed

Comments

@shigetaichi
Copy link

こちら https://tech.andpad.co.jp/entry/2022/05/12/100000 の記事を読ませていただきました。
とても助かりました。ありがとうございます。

こちらのライブラリを使っていて、以下問題?に遭遇したので共有させていただきます🙇

func main() {
	const msg = "一二三四🍣五六七八九🍺十拾壱"
	longMsg := strings.Repeat(msg, 4000) // 4096バイトを超えるようにする
	
	fp, err := os.Create("SJIS.txt")
	if err != nil {
		panic(err)
	}
	defer fp.Close()
	sjisWriter := bufio.NewWriter(transform.NewWriter(fp, garbledreplacer.NewTransformer(japanese.ShiftJIS, '?')))

	// 以下エラー処理省略
	_, err = sjisWriter.WriteString(longMsg)
	if err != nil {
		log.Fatal(err)
	}
	_ = sjisWriter.Flush()
}

上記のように、4096バイト以上の文字列をshift-jisに変換するとErrInvalidUTF8のエラーが出ます。
本来なら長い文字列でも問題なく変換できるのが良いと思います。

@shigetaichi
Copy link
Author

自分で調査した中で見つけた解決策があるのでPRとしてあげております。

お時間ある時にぜひ見てみてください🙇

@tomtwinkle
Copy link
Owner

issueありがとうございます!
問題を確認します。

transformのdefaultBufSizeは4096バイトなので4096byteの境界で対象文字列があると問題が発生するかもしれません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants