Google ColabでC#を実行したときに「=」や文字化け(豆腐)が出るやつね。
原因はColab側が出力に付けちゃう制御シーケンス(ANSIエスケープとかプロンプト記号)なんだ。
dotnet run や dotnet script がターミナル向けに色付けや制御文字を出しちゃうから、
Colabのノートブック出力欄だとそれが正しく解釈されずに「=」や□として表示されちゃうのよ。
対処法はこんな感じ。
- 環境変数でANSI出力を無効化する
セルの最初にこれを実行してからC#を走らせてね。
import os
os.environ["DOTNET_CLI_TELEMETRY_OPTOUT"] = "1"
os.environ["DOTNET_NOLOGO"] = "1"
os.environ["TERM"] = "dumb"
TERM=dumb にすると、dotnetが色とか制御シーケンスを出さなくなるよ。
- 出力をリダイレクトして余計な文字を除去
dotnet run の出力をそのまま表示しないで、Python側で受け取って整形する感じ。
import subprocess
result = subprocess.run(
["dotnet", "run", "--project", "."],
capture_output=True, text=True, env={**os.environ, "TERM": "dumb"}
)
import re
clean = re.sub(r"\x1b[[0-9;]*[A-Za-z]", "", result.stdout)
print(clean)
- Console.OutputEncoding を明示する
文字化け(豆腐)がUnicode由来なら、Program.csの先頭にこれを追加してね。
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine("Hello, World.");
- それでも「=」が残る場合
「=」はdotnetのビルド進捗やプロンプトがColabの出力欄で崩れたものだから、
--nologo と -v q(quiet)を付けてビルドメッセージを抑制してね。
!dotnet run --nologo -v q
補足
根本原因は「Colabの出力セルがTTYじゃないのに、dotnetがTTY向けの装飾を出している」こと。
上の TERM=dumb + 出力キャプチャの組み合わせで、Hello, World. だけが表示されるようになるよ。
●●●●
2026/09/30 10:20