最近困ったこと | マウントと文字化け
この記事はKogakuin Univ Advent Calendar 2022に含まれています.
書かないよりはマシなので最近困ったことを書きます.解決法知ってる人いたら教えてください.
1.UbuntuでSDカードがマウントできない問題
具体的にはdmesgしたあとどれがSDカードリーダーなのかわからない.
UbuntuでgccコマンドをDドライブで実行したい.でもDドライブ(外部SDカード)にcdできない.Cドライブ(内部SSD)にはcdできるしgccもできる.
mntディレクトリにはmnt/c/
,mnt/wsl/
,mnt/wslg/
の三つのディレクトリだけで,SDカードっぽいのは無さそう.
試したこと
「Ubuntu saカード マウント」で検索して出てきたことを試そうとした.
閲覧したサイト
- 【Linux】SDカードを認識・マウントする方法 | 積水成淵日記
- 新品のMicroSD等をLinuxでマウントする際の手順メモ - Qiita
- メディアカードリーダーの問題 - Ubuntu 18.04 LTS デスクトップガイド改
dmesgしたあとSDカードリーダーがなんという名前で認識されているのかわからない.逆にこれらの記事ではどうやって判断しているのか.
恐る恐るmountコマンドを実行してもエラーが返される,それがマウントするターゲットが違うことを知らせるエラーなのか,それ以外の要因で起こるのエラーなのか分からない.
臨時対応策
現在はとりあえずMinGWでやる代用している.MinGWでなにか困ることがあるかといわれると別にないが,解決策が知れるなら知って気持ちよくなりたい.
解決策
Dドライブならこれ
sudo mkdir /mnt/d sudo mount -t drvfs D: /mnt/d
Cドライブ,Dドライブ以外はこれだと一度WSLを閉じるとアンマウントされてしまう. 私の場合もEドライブだった.この場合は以下の手順によって自動でマウントされるようになる.
1.3. Windowsドライブマウント設定 - Qiita
2.PowerShellでC言語のprintf出力した日本語が文字化けする問題
2022/12/20追記
解決しました.
Cファイルの保存形式をShift-Jisにしたところ,問題なく日本語が表示された.
(今まではutf-8で保存してた)
具体的には筆者はVisual Studio CodeでCファイルをShift-Jisで「エンコード付きで保存」とした.
一応保存形式の変更は以下を参考に.
Visual Studio Code のファイルエンコードにシフトJISを使用する
こうするとPowerShellのchcpは932(Shift-Jis)でも65001(utf-8)でも正しく日本語が表示されるようになった.
なぜ気づかなかったのか....
2022/12/20追記分終わり
1の臨時対応策としてMinGWを使ってCファイルをコンパイルしてみたら,printfした日本語が文字化けしてた.
Visual Studio CodeでC言語を編集.以下VSCode内からWindows PowerShellで実行
$gcc test.c
a.exeが同じフォルダに生成される.日本語が文字化け
$./a.exe hello 縺薙s縺ォ縺。縺ッ・・
使用したCファイルはこんな感じ.当然stdio.h
は問題なくインクルードされている.
#include <stdio.h> int main(void){ printf("hello こんにちは!\n"); //hello 縺薙s縺ォ縺。縺ッ・・ return 0; }
見た感じフォントの問題ではなさそう.
試したこと
chcp 65001
- 元々は932でshift-jisだった
- 65001はutf-8
- Code Page Identifiers - Win32 apps | Microsoft Learn
VSCodeの保存形式をBOM付きにした
Windows PowerShell(標準でインストールされているやつ)ではなくPowerShellで実行
- Coreとかいうやつ
chcp 932 と65001
BOM無し と BOM付き
Windows PowerShell と PowerShell
以上2×2×2で8通り試したがダメだった.
臨時解決策
コマンドプロンプトで実行したところchcp 65001にしたらBOM付き無し関係なく文字化けしなくなった.
まあ正直PowerShellとComndPromptはどっちでもいい.でもなぜだろう?バグ?
日本語使うなということでしょうか.