未踏作業日誌――余計なもの作るよ!

未踏の作業日誌的なものを書きましょうということで書くことにしました.余計なことばっかりしています.

一昨日のライブラリのバグを修正

一昨日公開したutf8-sjis-encoderですが,諸々のバグがあったので修正しました.

GRGSIBERIA/utf8-sjis-encoder · GitHub

 

最初の仕様はDictionaryで変換テーブルを作っていました.これは,VS2012のコンソールアプリ上では動いたのですが,Unityで動かしてみたら3GBぐらいメモリを食って落ちるようになってしまいました.

次の仕様は,それを全部switch-caseに置き換えて動かしたのですが,今度はUnityのMonoがコンパイルの時点で落ちるようになってしまったのですぐさまボツになりました.

最終的には,UTF-16Unicode)とSJISがそれぞれ2バイトで収まるので,巨大な配列で変換テーブルを用意してそれで動かしてみよう,というアドバイスを頂いたので実際にやってみたところ動くようになりました.

 

しかし,完成した一方で参考にしていたサイトが同じSJISでもcp932ではなく,JIS X 0208という種類のものだったので,最悪文字化けするという指摘がありました.僕も今どきSJISと言えばcp932のことだろJKぐらいに思って実装していたので,この指摘があってから慌てて修正しました.

C#のGetEncoding("Shift_JIS")が具体的にどのSJISを指しているのか,MMDがどの種類のSJISを利用しているのか定かではないので,かなり不安な部分もありますが,cp932に対応できたので現代的なSJISの使い方をしていればたぶん文字化けはないと思います.

 

ひとまず,保存したVMDをBase64に変換できるようになりました.これをサーバに送って保存する,ということを次はやろうと思います.

最近はAmazon S3 + Cloud Frontで軽いファイルを扱おうと思っているのですが,内心ではGoogle Driveを使いたいなと思い始めてます.今は軽いですが,S3はリクエスト課金なので,いきなりリソースを食いつぶさないか少しだけ心配です.

アップロードの仕組み自体を変えるとなると,JSから構築し直しなのでなかなか頭の痛い部分ではあります.