In C #, the following code works for me. I wanted to try this to prove my results below:
public void Convert()
{
using (TextReader input = new StreamReader(
new FileStream("shift-jis.txt", FileMode.Open),
Encoding.GetEncoding("shift-jis")))
{
using (TextWriter output = new StreamWriter(
new FileStream("utf8.txt", FileMode.Create), Encoding.UTF8))
{
var buffer = new char[512];
int len;
while ((len = input.Read(buffer, 0, 512)) > 0)
{
output.Write(buffer, 0, len);
}
}
}
}
Shown here is a file encoded in shift-jis (or SJIS / Shift_JIS they are the same ), using JEdit to check the encoding (the word in the file is the text in the Japanese text テ ス ト):

, (utf8.txt):

, - .