VBのソフトをC#に移植していて、ちょいちょいShift_JISのファイルをUTF-8に変換したいことがある。
その都度スニペットをコピペするのも飽きてきたのでパッケージにしてみた。
Package Description
ダサいDescriptionだ。
using System.IO; using ShiftJISExtension; using (var utf8stream = await File.Open("sjis.txt").ToUTF8Async()) using (var reader = new StreamReader(utf8stream)) { // ... }
多分こんな感じで使えます。Shift_JISをUTF-8に変換したいぜ!!! という人はどうぞ。
CP932
Shift_JISは色々あって難しいのだけれど、Windows標準で使ってるShift_JISならこれでいいんじゃないの。くらいの気持ちでそれにしてみた。
Shift_JIS難しすぎる。
文字コードの変換
文字コードの変換は多分色々手法があるのだろうけれど、今回は変換元がShift_JISであると決め打ちできるので単にShift_JISとして読み込んで.NETの世界の文字列にして、それをUTF-8で出力している。
var inputBytes = inputMs.ToArray(); var inputStringFromEnc = fromEnc.GetString(inputBytes); var inputStringToEnc = toEnc.GetString(inputBytes); converted = toEnc.GetBytes(inputStringFromEnc);
変換元を決め打ちできない場合、マシンパワーは使うけれど想定されるエンコーディングでの読み込みと保存を順番に試していって、保存しても文字列が変化しないエンコーディングだろうと当たりをつけることができる。
var isUtf8 = inputBytes.SequenceEqual(toEnc.GetBytes(inputStringToEnc));
元々UTF-8だったらそのままでいいので、元のストリームのコピーを返すようにしている。