週間ボカランのマイリストから、「ボカランを再ランキング」コンテンツを作っている私としては結構死活問題です。
ちなみに、再ランキングを動かしているスクリプトの環境は。
WindowsXP + Excel2000という数世代前の環境ですw
んでVBA(マクロ)でがっしがっし動くように作っていたんです。
話は戻りまして。
今まで、マイリストは今までHTMLで構成されていたんですが、今度からはJavaScript(Ajax)となってしまいまして。
データ形式が大幅に変更となりました。
ってことで、抽出スクリプトをガシガシ変えていたんですが。
でかい壁にぶち当たりました。
Unicode Escape Sequence(ユニコードエスケープシーケンス)
2バイト文字が総じて、「\u521d\u97f3\u30df\u30af」こんな感じにエンコードされているわけです。
こいつをデコードしなくちゃ日本語として表示できないわけでして。
こりゃやべぇと。
あちこちのサイトとか巡ったわけです。
んで、やっとこさ自分の納得できる関数ができあがりました。
バグ取りとかなーんもしてないので、何か問題起きてもしらんですが、とりあえず私の環境ではまともに動いているようなので、スクリプト晒します。
何の役に立つかは解りませんがwww
''-------------------------------------------------------- '' \u521d\u97f3\u30df\u30af こんなふうに '' Unicode Escape Sequence(ユニコードエスケープシーケンス) '' されている文字を変換するVBAスクリプト(XP-Excel2000動作確認済) '' 引数に\u521d\u97f3\u30df\u30afとなっている文字をぶち込んで下さい '' '' 使ったことで何か起きても責任は持ちませんので、自己責任でよろしくです。 '' (趣味用で適当に組んだのでバグがあるかもwww) ''--------------------------------------------------------- Private Function Henkan(ByVal strTemp As String) As String On Error GoTo Err_Henkan: Henkan = "" Dim INT_BYTE As Integer ''INT_BYTEは、\uの後数値何文字あるか。 ''一応定義しておく定数。大概4だと思うけど。 INT_BYTE = 4 Dim i As Integer Dim flgUnicode As Boolean ''初期値設定 flgUnicode = False ''文字数分ループ For i = 1 To Len(strTemp) ''Unicodeフラグがたっていなくて、"\"がきたら If (flgUnicode = False) And (Mid(strTemp, i, 1) = "\") Then i = i + 1 ''ひとつ文字を進めて次がUで、\u ユニコードエスケープシーケンスだったら。 If Mid(strTemp, i, 1) = "u" Then i = i + 1 flgUnicode = True Else i = i - 1 flgUnicode = False End If End If ''Unicodeフラグがたっていたら If flgUnicode Then ''4バイト分切り出して16進変換してChrWで文字変換 ''INT_BYTEは、一応定義しておく定数。大概4だと思うけど。 Henkan = Henkan & ChrW("&H" & Mid(strTemp, i, INT_BYTE)) i = i + 3 ''フラグ戻しておく flgUnicode = False Else ''ただの半角文字だったら Henkan = Henkan & Mid(strTemp, i, 1) End If Next i Exit Function Err_Henkan: Henkan = "残念ですがエラーが発生しました。" End Function
ま、こんな感じっす。
ご使用はあくまで自己責任でお願いします。
何か起きても私は一切責任を取れませんのであしからず。