VB.NET なんだから Shift_JIS については頑張れ・・・という話。
(他人の)プログラムのテストをしているのだが、固定長のデータ(Shift_JIS の日本語混じり)の処理でちょっとはまった。
で読み込んだテキストファイルのレコード(1行)毎に、
みたいにバイト単位に分解して、バイト数を指定してデータを抜き出すんだけど、なんか、範囲外へのアクセスが行われた関係の例外が発生する。
調べると、227バイトのはずのレコードが 225バイトになっている。うまくエンコードできてないんやなあ・・・
こりゃ、読み込んだ時点で Shift_JIS だと判断されてないで・・・と思い、OpenTextFieldParser で文字コードを指定しようと思ったんだけどできんのやね。それならバイナリモードみたいなん、ないの?と思ったけどよくわからん。
結局、
で読み込めば問題なく処理された。
やれやれ。Microsoft なんだから、しっかり Shift_JIS は処理せえよ(笑)
ちなみに、こういう話になると、自称 UNIX 技術者が「Shift_JIS なんか捨てなよ」で話を終わらせようとする場面をよく見る。
思考停止も甚だしい。この世には Shift_JIS のファイルも、Excel 方眼紙も、まだまだ存在しているんだ。「Excel なんか捨てなよ」って簡単に言うやつは単なる「思考停止のふにゃちん技術者」。「捨てなよ」だけではなんの解決にもならない。
「もう、こういうのはやめましょうね」は良い。しかし、過去のデータは簡単には捨てられない。そこで「捨てちゃいなよ」しか言わないやつは糞の役にも立たないので黙っとけってことなのだ(笑)。お前だ、お前。まず、「捨てちゃいなよ」「やめちゃいなよ」の前に現状の解決策を示せ。
(他人の)プログラムのテストをしているのだが、固定長のデータ(Shift_JIS の日本語混じり)の処理でちょっとはまった。
Using tfp = fs.OpenTextFieldParser(path)
で読み込んだテキストファイルのレコード(1行)毎に、
Dim ByteArray As Byte() = Encoding.GetEncoding("Shift_JIS").GetBytes(Str)
みたいにバイト単位に分解して、バイト数を指定してデータを抜き出すんだけど、なんか、範囲外へのアクセスが行われた関係の例外が発生する。
調べると、227バイトのはずのレコードが 225バイトになっている。うまくエンコードできてないんやなあ・・・
こりゃ、読み込んだ時点で Shift_JIS だと判断されてないで・・・と思い、OpenTextFieldParser で文字コードを指定しようと思ったんだけどできんのやね。それならバイナリモードみたいなん、ないの?と思ったけどよくわからん。
結局、
File.ReadAllLines(path, Encoding.GetEncoding("shift_jis"))
で読み込めば問題なく処理された。
やれやれ。Microsoft なんだから、しっかり Shift_JIS は処理せえよ(笑)
ちなみに、こういう話になると、自称 UNIX 技術者が「Shift_JIS なんか捨てなよ」で話を終わらせようとする場面をよく見る。
思考停止も甚だしい。この世には Shift_JIS のファイルも、Excel 方眼紙も、まだまだ存在しているんだ。「Excel なんか捨てなよ」って簡単に言うやつは単なる「思考停止のふにゃちん技術者」。「捨てなよ」だけではなんの解決にもならない。
「もう、こういうのはやめましょうね」は良い。しかし、過去のデータは簡単には捨てられない。そこで「捨てちゃいなよ」しか言わないやつは糞の役にも立たないので黙っとけってことなのだ(笑)。お前だ、お前。まず、「捨てちゃいなよ」「やめちゃいなよ」の前に現状の解決策を示せ。