-
Notifications
You must be signed in to change notification settings - Fork 3
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
`gsub': invalid byte sequence in Windows-31J #21
Comments
このエラーメッセージ、Windows-31Jのマルチバイトシーケンスとして読もうとしたらおかしなバイトシーケンスを見付けました!(キラーン と言ってるように見えます。 Rubyのオプション(=環境変数?)でデフォルトのテキストエンコーディングをShift_JISにしてた、とかいうオチなんではないかと思います。 UTF-8は7bit以上のコードを表現するのに、一定のパターンで各byteの最上位ビットを立てます。 Shift_JISに存在しないパターンのバイト並びをデコーダに与えたとき、 |
どこに Windows-31J として扱われる文字列があるか、というのが肝です。 「Rubyが2.0になってから、このマジックコメントを指定しない場合のデフォルトのファイルエンコーディングがUS-ASCIIからUTF-8に変更されました」 「REM 日本語を扱えるように内部エンコーディングを UTF-8 にする」 あとは、ファイルシステムエンコーディングに由来するのかなあ、よくわからんなあ、という感じです。 |
引用先の記述はコードに関するものです。 言語仕様として、文字列のエンコードを想定しない、になっているにしても、I/OライブラリはC言語で書かれる環境依存のものです。windows向けの移植ではほぼvcrtが使われますがvcrtはバイトシーケンスをロケール依存のマルチバイトシーケンスと解釈します。 I/OのデフォルトはUTF-8にしてそうだったので原因は謎ですが、何らかの理由でシステムデフォルトが使われている可能性はあると思います。 |
1番目はそうです。文字列リテラルや正規表現リテラルがスクリプトエンコーディングの影響を受けるので、外部由来の文字列変数を埋め込んだり連結したりする際にエンコーディングのミスマッチが起きがちです。 2番目の引用が入出力で想定するデフォルトの文字コードについてです。「I/OのデフォルトはUTF-8にしてそうだった」の根拠に当たる部分ですよね。このオプションが実は機能していませんでした(テヘッ なんてのは知ったこっちゃないので、とりあえず別に原因を求めた結果が先のコメントです。 |
I/OのデフォルトがUTF-8にしてそうというのは、このコミット db9d666 を見て思ったことです。 ruby.exeの起動オプションになんか指定してる 特定の関数を使う場合に効果があるとか、特定のパッケージを使う場合には効果がないとか、ありがちだと思います。おそらくバグというよりはオプションの特性に起因する挙動の違いなんじゃないかな、と。 解決策を導き出すために、検証のネタになりそうな仮定を書いてます。 |
Ruby 1.9 ですが……
berryzplus さんの想定はかなりありえることですが、デバッグ環境がなくてはどうにも。実は https://github.com/takke/changelog-sakura/blob/334126dcd8f0df46ea9a2138e6e843841060439d/makeChangeLog.bat を見てもどこで ruby.exe を起動しているのか、実行スクリプトの内容は、などさっぱりわかっていません。 |
45行目の |
そうだろうとは思います。その中身と思しきものは、別のリポジトリで確認した気がします。しかしあまりにも不確かです。 |
gem(=rubyのパッケージシステム)だった...orz じゃ、どうやって |
#13 (comment)
の以下のエラーが出る (ruby 2.4.5 および 2.6.1 で確認) d176c0f を使用。
github_changelog_generator.bat --help のみで発生。
日本語の .github_changelog_generator をうまく扱えない。
.github_changelog_generator から日本語を取り除くとエラーは発生しない。
The text was updated successfully, but these errors were encountered: