最近困ったこと | マウントと文字化け

この記事はKogakuin Univ Advent Calendar 2022に含まれています.

書かないよりはマシなので最近困ったことを書きます.解決法知ってる人いたら教えてください.

1.UbuntuでSDカードがマウントできない問題

具体的にはdmesgしたあとどれがSDカードリーダーなのかわからない.

UbuntugccコマンドをDドライブで実行したい.でもDドライブ(外部SDカード)にcdできない.Cドライブ(内部SSD)にはcdできるしgccもできる.

mntディレクトリにはmnt/c/mnt/wsl/mnt/wslg/の三つのディレクトリだけで,SDカードっぽいのは無さそう.

試したこと

Ubuntu saカード マウント」で検索して出てきたことを試そうとした.

閲覧したサイト

dmesgしたあとSDカードリーダーがなんという名前で認識されているのかわからない.逆にこれらの記事ではどうやって判断しているのか.

恐る恐るmountコマンドを実行してもエラーが返される,それがマウントするターゲットが違うことを知らせるエラーなのか,それ以外の要因で起こるのエラーなのか分からない.

臨時対応策

現在はとりあえずMinGWでやる代用している.MinGWでなにか困ることがあるかといわれると別にないが,解決策が知れるなら知って気持ちよくなりたい.

解決策

Dドライブならこれ

WSLでSDカードをマウントする - Qiita

sudo mkdir /mnt/d
sudo mount -t drvfs D: /mnt/d

Cドライブ,Dドライブ以外はこれだと一度WSLを閉じるとアンマウントされてしまう. 私の場合もEドライブだった.この場合は以下の手順によって自動でマウントされるようになる.

1.3. Windowsドライブマウント設定 - Qiita

2.PowerShellC言語の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 CodeC言語を編集.以下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 932 と65001

BOM無し と BOM付き

Windows PowerShellPowerShell

以上2×2×2で8通り試したがダメだった.

臨時解決策

コマンドプロンプトで実行したところchcp 65001にしたらBOM付き無し関係なく文字化けしなくなった.

まあ正直PowerShellとComndPromptはどっちでもいい.でもなぜだろう?バグ?

日本語使うなということでしょうか.