2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

自動生成したHTMLがLinuxで文字化けしたときの対処法

Last updated at Posted at 2019-02-22

現象

Windows では意図通りに生成できた HTML(UTF-8) がLinux (Ubuntu、CentOS) では文字化けする。

再現条件

各 OS で当初の使用ブラウザは以下の通り。

Windows 10 では Chrome を利用している。
こちらは問題なく意図した表示がされる HTML を吐き出す。

Ubuntu 18.04 LTS では Chromium をデフォルトに設定している。
Ubuntu 特有の症状か確認するため、Windows 10 上の仮想マシンへ CentOS 7 をインストールした。
ペンギンたちは両者とも HTML の表示は文字化けしている。

ただし、Firefox では問題なく意図した通りに表示された。
狐につままれたような気持ちだわ。偉いぞ狐。

解決に至るまで

ファイルエンコードがおかしい?

つまらないケアレスミスをしていないか。
保存時にエンコードを Shift_JIS あたりにしていないか。

  • 当然 UTF-8 にしてますよねー。

生成時のファイルエンコードがおかしい?

他の言語が同じ場面でどうなるか分からないので、今回はあくまで Python 3.7.0 での話。
違う言語で開発していれば困らないのだろうか。
しかし別章で示すけど、JavaScript と PHP(2014年なので ES2015 や PHP 7 以前の時代だろうか)も同じ現象があったみたい?

ファイル生成時にやらかしているかもしれない。
ファイルの読み書き時にエンコードを指定できるので、保存時に何かやらかしている可能性に賭けて一応エンコードを弄る。

  • そもそも Python 3 系はデフォルトで UTF-8 だよなぁ。

Linux だと入出力が変わる?

sysio を import して標準入出力を弄ろうとしたりlocaleの設定を変えたり

確認.
$ echo $LANG
ja_JP.UTF-8

変更してもどうにもならないっすね……。

様々なサイトを読んでいると、Linux で皆さん同じようなことで苦労しておられるようで。
どうにかしてくれ。

解決策

header に metaタグ を付けよう(戒め)

生成ファイルをブラウザ上で確認したいなら、一行目に <meta charset="UTF-8"> を書くだけで読めますね。
HTML4 なら<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> で指定していたみたいね。
これに気づくまでに3時間……。
自分の場合は生成ファイルをテンプレートエンジンに埋め込むため、テンプレートエンジンが UTF-8 に設定されていれば期待通りの表示がされてくれると祈祷している。

祈りが通じなかったら追記します。

2
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?