ページ

2016年9月14日水曜日

【sinatra】invalid byte sequence in Windows-31J対策

状況


sinatraを使ってWebアプリケーションを作成していると、

invalid byte sequence in Windows-31J

というエラーが気まぐれに出ます。
このエラーページにある
Windows-31J
というのは、Shift-JISを改造した文字コードみたいなものです。(検索してみてください。詳しく解説しているサイトがあります)

原因


rubyは違う文字コード(例えば UTF-8 など)で書かれたソースコードをWindows-31Jで読み込もうとするため、エラーが表示されるのです。

対処


対策として、

Encoding.default_external = 'UTF-8'

をrubyファイル(.rb)の先頭(1行目)に入力してください。

※UTF-8の部分は、保存したときの文字コードに合わせてください。
ただ、プログラミングをするのならUTF-8を強くお勧めします。というか、こちらが標準です。
(バッチファイルを書くのならShift_JISでもよいと思いますが...)
参考:RubyのSJISはShift_JISじゃない

入力するのは、ERBファイル(.erb)ではないです。

こうすることで、rubyのインタープリタに文字コードを知らせることができます。

0 件のコメント:

コメントを投稿