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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- その他(Microsoft Office) 英数字のみ全角から半角に変換 4 2023/07/28 14:48
- 防犯カメラ・監視カメラ・小型カメラ 屋外用のIPカメラ(ライブカメラ)の位置情報について 1 2022/06/23 18:32
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス ステータスバーの文...
-
ワードのVBAで
-
一番右のスペース以降の文字列...
-
EXCELのVBAでLenB関数について
-
エンコード・デコードの仕方
-
TextFieldParserの固定長桁数を...
-
ASC関数
-
文字列の中の1文字を比較するに...
-
WSTRINGとは?
-
ファイル名の一部削除について
-
マルチバイト混在の文字列整形
-
VBA 変数名に変数を使用したい。
-
SQLを発行とは?クエリの作成と...
-
配列のペースト出力結果の書式...
-
ExcelVBAからAccessMDB内のテー...
-
C# DataTableに最後に追加した...
-
vba フィルター 複数条件 3つ以...
-
ACCESS2010 実行時エラー 2766
-
DataGridの中身をDataSetにテー...
-
構造体配列の特定のメンバーをF...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
一番右のスペース以降の文字列...
-
TextFieldParserの固定長桁数を...
-
CString型 全角半角を意識せず...
-
StrConvでUnicodeに変換出来な...
-
アクセス ステータスバーの文...
-
文字列から、null値を除去する方法
-
エクセルで13,410円を数値の134...
-
「シフトJIS X 0213」形式の文...
-
文字列の中の1文字を比較するに...
-
VB6.0 文字列のファイル書...
-
ASC関数
-
機種依存文字と特殊文字について
-
WSTRINGとは?
-
HEX
-
VB.NET ListBox内の前方一致で...
-
VB6のテキストボックスに入力し...
-
VBからID3タグをいじる方法
-
VBScriptで半角カナと半角英数...
おすすめ情報