C# 文字化け問題解決

C#でGitのDiffコマンドを起動して受け取った結果を処理しとうと思い、ずっと後回しにしてた文字化け問題がやっと解決しました。

C#ではProcessクラスで外部コマンドを実行し、標準出力から結果を受け取ります。ここで受け取るときに文字化けを起こしていました。文字列を受け取った後に、文字列をエンコードしても、微妙に文字化けがのこってしまいうまくいきませんでした。

原因

Processクラスで結果を受け取るには、StandartOutputプロパティを参照しますが、StandartOutputはReadStreamオブジェクトであり、Net Fremeworkでは既定のエンコードであるShift-JISとなります。一方Git Diffの出力はUTF-8なので、Shift-JISでUTF-8を読みに行くので文字化けとなってしまいました。

解決法

ProcessオブジェクトにはStartInfoクラスがあります。ここにエンコードを指定するプロパティがあり、UTF-8に設定します。

 Process.StartInfo.StandardOutputEncoding = Encoding.UTF8;

コードサンプル

Process process = new Process(); 
// コマンド名 
process.StartInfo.FileName = command; 
// 引数 
process.StartInfo.Arguments = argument; 
// StandardOutputで結果を受け取るために必要な設定 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
// StandardOutputのエンコード設定 
process.StartInfo.StandardOutputEncoding = Encoding.UTF8; 
// 実行 
process.Start(); 
//プログラムが実行完了するまで待つ 
process.WaitForExit(); 
//結果格納 
var str = process.StandardOutput.ReadToEnd(); 
//プロセス終了 
process.Close();

参照

ProcessStartInfo.StandardOutputEncoding プロパティ

エクスプローラーから直接カレントフォルダ指定でVSCodeを開く

Windowsでちょっとしたプログラミングをするときに、Visual Studio Codeを使うのですが、エクスプローラーで開いているフォルダを指定して Visual Studio Code を開く方法です。

やり方1 コマンドプロンプトを開く

やり方は次の通り

  1. エクスプローラーでフォルダを開く
  2. アドレスバーに[ cmd ]と入力する
  3. コマンドプロンプトに[ code . ]と入力する

ちなみに .(ドット)は現在のフォルダの意味です。

開き方1

やり方2 直接表示

次はエクスプローラから直接VSCodeを開くコードです。[ cmd ] の後ろに[ /k ]か[ /c ]のオプションをつけるとコマンドを指定することができます。

オプションの [ /k ]はVSCodeを閉じたあともコマンドプロンプトが開いたままに、[ /c ]は VSCode閉じるときにコマンドプロンプトもいっしょに閉じます。

開き方2

Ryzen自作PC Windows11インストールで苦労した話

だいぶ久しぶりに自作パソコンを制作しました。意外と苦労した点を書きます。

主な部品は次の通り

  • CPU ・・・AMD Ryzen 7 5800X
  • マザーボード ・・・ASRock アスロック B550 Steel Legend
  • GPU・・・ASUS TUF-GTX1660S-6G-GAMING
  • ファン・・・虎徹 MarkII Rev.B SCKTT-2100
  • メモリ・・・32GB
  • SSD・・・500GB
  • ハードディスク・・・8TB

ちなみに今回選んだCPUはGPUもファンもついてないので、別途購入する必要があります。

メモリサイズを間違えた

メモリの種類がDDR4ということはわかってましたが、大きさまで気にしておらず間違えてノートPC用を買ってしまいました。組み立てる段階で間違えに気づき、慌ててAmazonで注文しました。

間違えたやつは260pin

260pin

正解は288pin

288pin

画面に全く映らない

組み立てが終わり、電源を立ち上げたら、画面が真っ黒のままで何も映りませんでした。マザーボードのコードには0dと表示。ホームページで調べてもあまりはっきりしたことが書いてなくてわかりませんでした。いろいろ試した結果。メモリがちゃんとささってないことが原因でした。

Windows11がインストールできない

Windows11をインストール開始すると、シリアル番号を入力した後にハードウェアが対応していないという警告がでてインストールできませんでした。UEFIのセキュアブートを有効にすることで解決しました。

そのままではセキュアブートを変更することができませんでした。起動タブでCSMを無効にし再起動してようやくセキュアブートを有効にすることができました。

  1. CSMをOFFする
  2. 再起動
  3. セキュアブートを有効
CSM無効
セキュアブート有効