PureBasicでとあるページを読み込んで中のデータを抜き出す用事があたのだが、別のサイトの方が使い勝手がよさそうなのでそこから抜き出すことにした。
アクセス先のURIを書き換えて抜き出す部分をそのページ合わせて書き換えればOKだな、楽勝~と思ったけど、そこがShiftJISで記述されててこまった。
これまではUTF8なページだったので、そのまま使うと文字化けしてパタンマッチが使えない。
いろいろ調べてみたらWin32 APIのMultiByteToWideChar(), WideCharToMultiByte()を使っている例が見つかったので、それを参考にやってみたがうまく行かない。
> MultiByte to UTF-8
原因はPeekS(*MemoryID, length, #PB_UTF8)のままデータを文字列変数にいれてたこと。
ダサいね(^^;
PeekS(*MemoryID, length, #PB_Ascii)と#PB_UTF8を#PB_AsciiにすることでShiftJISな文字列をちゃんとUnicodeに変換してくれているようだ。
中でMultiByteToWideChar()を呼び出してたりするんだろうか。
というわけで、何日もうまく行かなくて悩んでたけど、実に簡単なことで悩んでた。俺の時間を返せ…
忘れて知ってまた時間を無駄にしないようにここにメモとして書いておく。
僕みたいにダサい人が見つけて助かるかもしれないしね。
Define.l *MemoryID Define file$ = OpenFileRequester("Select a file","tmp.txt.sjis","Text (*.txt)|*.txt;*.sjis;*.utf8|All files (*.*)|*.*",0) If file$ If ReadFile(0, file$) length = Lof(0) ; get the length of opened file *MemoryID = AllocateMemory(length) ; allocate the needed memory If *MemoryID bytes = ReadData(0, *MemoryID, length) ; read all data into the memory block Debug "Number of bytes read: " + Str(bytes) EndIf CloseFile(0) EndIf EndIf If *MemoryID text.s = PeekS(*MemoryID, length, #PB_Ascii) Debug "file(sjis)=[" + text + "]" ShowMemoryViewer( @text, 100 ) EndIf
試してないけど、EUCを読み込んでもUnicodeに直してくれるんじゃないかな。