No.3ベストアンサー
- 回答日時:
(゜▽゜*)♪ニパッ
個人的なロジック公開しちゃう
バグあるかも?
Sub Main()
MsgBox convUrltoUni("%a4%db%a4%b2%a4%db%a4%b2+%a4%db%a4%cb%a4%e3%a4%e9%a4%e9%a1%c1")
End Sub
Public Function convUrltoUni(inVal As String)
Dim lngLen As Long '文字長
Dim lngFindPos As Long '%文字を見つけた位置
Dim lngStart As Long '検索開始位置
Dim strWk As String '文字列連結用ワーク
Dim blnHigh As Boolean '文字列が全角か半角によって切り替わるフラグ
Dim bytWk As Byte '「%**」の値
Dim bytHigh As Byte '全角文字の時の上位バイト
Dim bytLow As Byte '全角文字の時の下位バイト
Dim bytChar1 As Byte '変換ワーク上位
Dim bytChar2 As Byte '変換ワーク下位
Dim eucCrLf As Byte 'EUCの改行コード
'EUC改行コードを取得
eucCrLf = Asc(vbLf)
'文字長を得る
lngLen = Len(inVal)
'検索開始位置デフォルト
lngStart = 1
'上位バイトの処理を行ったことを記すフラグをおろす
blnHigh = False
Do
'%文字を見つける
lngFindPos = InStr(lngStart, inVal, "%")
'見つからなかったら、文字長+1をセット
If lngFindPos = 0 Then
lngFindPos = lngLen + 1
End If
'検索開始位置と「%」の発見位置が違うなら、半角文字が存在していることになる
If lngFindPos <> lngStart Then
'半角文字なので、そのままセット
strWk = strWk & Mid(inVal, lngStart, lngFindPos - lngStart)
blnHigh = False
End If
'「%」の発見位置が文字長を超えていたら抜ける
If lngFindPos >= lngLen Then
Exit Do
End If
'バイト値としてゲット
bytWk = CByte("&H" & (Mid(inVal, lngFindPos + 1, 2)))
'先に上位バイトの処理がなされていないなら
If Not blnHigh Then
'半角文字の時の処理
If bytWk < &H80 Then
'改行コードの処理
If bytWk = eucCrLf Then
strWk = strWk & vbCrLf
'改行コード以外の処理
Else
strWk = strWk + Chr(bytWk)
End If
'半角文字でないときの処理
Else
'下位バイトが必要なので、上位バイトとして値を記憶
bytHigh = bytWk - &H80
'変換準備上位(ここはお決まり変換ロジック)
If bytHigh < 95 Then
bytChar1 = 112
Else
bytChar1 = 176
End If
'上位バイトの処理を行ったことを記すフラグを立てる
blnHigh = True
End If
'すでに上位バイトの処理がされている時
Else
'上位バイトと組み合わせての変換処理(ここはお決まり変換ロジック)
bytLow = bytWk - &H80
If bytHigh Mod 2 = 1 Then
If bytLow > 95 Then
bytChar2 = 32
Else
bytChar2 = 31
End If
Else
bytChar2 = 126
End If
bytHigh = ((bytHigh + 1) \ 2) + bytChar1
bytLow = bytLow + bytChar2
strWk = strWk & Chr(CInt("&H" & Hex(bytHigh) & Hex(bytLow)))
'上位バイトの処理を行ったことを記すフラグをおろす
blnHigh = False
End If
lngStart = lngFindPos + 3
Loop
convUrltoUni = strWk
End Function
No.2
- 回答日時:
文字コードが分かっているのであれば、あとは自分が欲しい文字コードに変換するだけです。
文字コードの仕組みを解説したページを参考URLに記述しますので、読んでみてください。
記憶が正しければ、たしか変換方法も乗ってたと思ったんですが……。
参考URL:http://www.hosibune.net/~mak/technical/kanji.shtml
No.1
- 回答日時:
URL形式です。
デコードするには、まず「+」を「スペース」に置き換えます。
次に、%で始まる2文字を16進数と見なし、キャラクターコードに置き換えます。
その他の文字はそのままです。
ただし、エンコード前にどんな形式の文字列だったかという情報は、自動認識させるプログラムを書かないかぎり分かりません。
必ずしもシフトJISとは限らないので、変換してあげないといけない場合もあるのです。
今回の場合もシフトJISではなかったらしく、ただ変換しただけでは正しい文字列になりませんでした。
EUCで「ほげほげ ほにゃらら~」と書かれているようです。
この回答への補足
パターンから
%a4%db → 0xA4DB ⇒ EUCの「ほ」
のようだということは気が付きました。
→ の処理は何とかなりそうです。
⇒ の変換処理はサッパリ判りません。
EUCしか扱わないことを前提として、
&hA4DBから「ほ」を出力する方法を
アドバイス頂けますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
StrConvでUnicodeに変換出来な...
-
EXCELのVBAでLenB関数について
-
一番右のスペース以降の文字列...
-
ファイル名の一部削除について
-
CString型 全角半角を意識せず...
-
VB.NET ListBox内の前方一致で...
-
VBからID3タグをいじる方法
-
TextFieldParserの固定長桁数を...
-
アクセス ステータスバーの文...
-
文字列から、null値を除去する方法
-
ASC関数
-
機種依存文字と特殊文字について
-
XMLでデータとして画像を指定す...
-
VBA 変数名に変数を使用したい。
-
エクセルのテーブルを解除する...
-
SQLを発行とは?クエリの作成と...
-
vba フィルター 複数条件 3つ以...
-
『列名 '担当者CD' があいま...
-
Excel2010のinputboxで複数デー...
-
DataTableに特定のフィールドが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
StrConvでUnicodeに変換出来な...
-
TextFieldParserの固定長桁数を...
-
CString型 全角半角を意識せず...
-
文字列から、null値を除去する方法
-
一番右のスペース以降の文字列...
-
機種依存文字と特殊文字について
-
VBからID3タグをいじる方法
-
ASC関数
-
アクセス ステータスバーの文...
-
エクセルで13,410円を数値の134...
-
WSTRINGとは?
-
VB6のテキストボックスに入力し...
-
「シフトJIS X 0213」形式の文...
-
VB6.0 文字列のファイル書...
-
マルチバイト混在の文字列整形
-
C言語とWin32APIで全角かなの...
-
ワードのVBAで
-
Access VBAの参照設定(DAO)につ...
おすすめ情報