もし、SJIS変換している文字列が、Windows上で作成しているWindows-31j(MS932)で書かれた文字列のことであるなら、文字コードが違います。
ローカルで使われること前提の関数は、SJISと指定されている場合には、実際にはwindows-31jと仮定することでうまく動きそうなのですが、外部のインターネット上から取得したものを処理する可能性が高いものは、そうとも限らないため、SJISと指定されている部分は、本来のShift_JISとして処理されています。
Sfhit_JISではなく、Windows-31jの文字列の場合には、「NKF変換」命令にて、入力・出力の両方の文字コードを明示的に指定してみてください。