2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的な備忘録:WindowsのShift_JISとLinuxのUTF-8における文字コードの違いと簡単な変換方法について

Posted at

はじめに

WindowsとLinuxでは、デフォルトで使用される文字コードが異なります。

そのため、ファイルの文字化けや互換性の問題が発生することがあります。

本記事は個人的な備忘録としてまとめたものです。その点をご理解いただければ幸いです。

文字コードの違いに苦戦した経験がある

過去にLinuxで作ったおみくじアプリを、Windowsで再現しようとした際に苦戦した経験があります。

そのとき、全くうまく動作せず、原因を追求した結果、OSごとの文字コードの違いが原因であることがわかりました。

些細な違いに思えますが、それだけでアプリが動かないという問題が発生したため、文字コードの扱いには非常に苦労した記憶があります。

過去に苦労した技術検証

WindowsとLinuxのデフォルト文字コードの違い

Windows

  • デフォルトの文字コード: Shift_JIS (CP932)
  • 日本語環境: 一般的に Shift_JIS (MS932とも呼ばれる) が使用される。
  • PowerShell や コマンドプロンプト(cmd):
    • 既定では Shift_JIS (CP932) が使われる。
    • UTF-8 を使うには手動で変更が必要。

Linux

  • デフォルトの文字コード: UTF-8
  • 特徴:
    • ほとんどのLinuxディストリビューションでは、デフォルトで UTF-8 を使用。
    • システム全体の文字コードが統一されていることが多い。

文字コードの違いによる影響

ここでは、簡単に自分なりに知識整理として表形式でまとめてみましたので、参考にしてみてください

Windows (Shift_JIS, CP932) と Linux (UTF-8) の比較

項目 Windows (Shift_JIS, CP932) Linux (UTF-8)
日本語対応 一部の記号が異なる (例: , , ) 広く標準化されており、ほぼすべての記号に対応
互換性 LinuxでShift_JISのファイルを開くと文字化けすることがある UTF-8は多くのOSで標準対応
エンコーディング変更 chcp 65001 (UTF-8) に切り替え可能 iconvnkf コマンドでShift_JISに変換可能

ここまでの簡単なまとめ

  • WindowsShift_JIS (CP932)LinuxUTF-8 をデフォルトで使用する。
  • LinuxでWindowsのShift_JISファイルを開くと文字化けする可能性がある
  • iconvnkfPython を使ってエンコーディングを変換可能。
  • クロスプラットフォームでの開発では、UTF-8を統一して使用するのがベスト

文字コード変換の方法

WindowsでShift_JIS → UTF-8 に変換

PowerShellを使用

Get-Content file_sjis.txt | Set-Content file_utf8.txt -Encoding utf8
  • Get-Content

    指定されたファイル (file_sjis.txt) の内容を取得します。
    内容はテキストデータとして出力されます。

  • パイプ (|)

    Get-Content から出力されたデータを次のコマンドに渡します。

  • Set-Content

    Get-Content から受け取ったデータを新しいファイルに書き込みます。
    -Path オプションで出力先のファイル名 (file_utf8.txt) を指定します。
    -Encoding utf8 オプションで文字コードを UTF-8 に指定します。

Pythonを使用

with open("file_sjis.txt", "r", encoding="cp932") as f:
    text = f.read()

with open("file_utf8.txt", "w", encoding="utf-8") as f:
    f.write(text)

このスクリプトがやっていること

  • Shift_JIS (CP932) のファイル (file_sjis.txt) を開いて中身を取得する
  • 取得したデータを UTF-8 でエンコードし直して、新しいファイル (file_utf8.txt) に書き込む

LinuxでUTF-8 → Shift_JIS に変換

iconv コマンドを使用

iconv -f UTF-8 -t CP932 file_utf8.txt > file_sjis.txt

nkf コマンドを使用

nkf -s file_utf8.txt > file_sjis.txt  # -s は Shift_JIS

まとめ

最後までお読みいただき、ありがとうございました。今回は基本的な内容を簡単にまとめましたが、自分自身の振り返りの良い機会にもなりました。

今後も、こうした基礎的な内容を丁寧にアウトプットしながら、知識を確実に定着させていきたいと考えています。

この内容が、どなたかの技術の支えや学習の参考になれば幸いです。

2
2
1

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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?