とある開発で、首記の機能が必要になったのですが躓いております。
開発環境は以下の通りです。
OS:WindowsXP Pro SP2
言語:MicroSoft VisualBasic2005 ExpressEdition
テキストボックスにハングル、または中国語の文字を手入力し
内部処理で入力された文字コードよりKSコード、GBKを
取得するようなことをしたいのです。
(Shift化コードではなく、通常のコードです)
実験過程で、
・VBのテキストボックスに入力された文字コードを取得する為にはAscW関数を使用すること。
・取得できる文字コードはUnicodeであること。
以上が解決しております。
ですが、KSコードや、GBKのマップ構造がわからない為
Unicode To KSコード、GBKの変換ができずに頓挫しております。
S-JIS、JISは両方とも規則性のあるマッピングであったので変換処理がロジック化できたのですが、
ハングル、中国語にも同じようなロジックが通用しますでしょうか?
また、KSコード、GBKのマップ構造に関するサイトのURLなど御存知でしたら
御教示頂ければ幸いです。よろしく御願い致します。
No.3ベストアンサー
- 回答日時:
> 全角文字は2Bytesのはずなのですが、CP52936とCP50225で6Bytes、8Bytes取得してしまいました。
> 6Bytes文字コード中には0x3021、8Bytes文字コード中には0x6439があり、
>一見、取得したい値が含まれているようにも見えます・・・。この文字コードは何なのでしょうか?
エンコーディング固有のエスケープシーケンスが入っているようです。
昨日の回答(#1)で紹介したリンクにもありますが、
中国語で使われるHZというエンコーディング(CP52936)
では、他の文字コードとの区別を明確にするために
> この方法は ISO-2022-JP に似ていますが, エスケープシーケンスのかわりに
> ~{ で GB2312 の開始を, ~} で ASCII の開始(GBの終了)を示します。
> また ~ で行が終わっている場合は, 次の行とつながっていることを示します。
> ASCII の ~ 自体は ~~ で表します。詳細は RFC1842 を見てください。
ということをしています。
CP50225の方は 1B2429430E64390F →
ESC $ ) C SO 0x64 0x39 SI ですね。
0x64 と 0x39 が本当に欲しい部分で、
その他はエンコーディング指定等のエスケープシーケンスです。
ところで、GB 18030はUnicodeを丸ごと飲み込むような
巨大な文字集合なので、
> 全角文字は2Bytesのはずなのですが
2バイトに収まるとは限りません。
つかこの辺は昨日紹介したリンク先に書いてあることなんですが
読んでもらえませんでした?
RFC 1557 - Korean Character Encoding for Internet Messages (日本語訳)
http://www.cam.hi-ho.ne.jp/mendoxi/rfc/rfc1557j. …
CJK CHARACTER SET STNADARDS CLASSIFICATION. VERSION 0.1
http://tagunov.tripod.com/cjk.html#A1.2.4
http://www.iana.org/assignments/charset-reg/GBK
GBコードについて【メモ】
http://www.antenna.co.jp/ml/back/Chinese/gb_char …
リンク先を拝見致しました。日本のJISコードのようなルールの文字コードは
中国語(HZ)CP52936と韓国語(ISO-2022-KR)なのですね。
考えてみれば該当国語へのシフトやASCIIへシフトするための
エスケープシーケンスが入るのは当然のことなのですが
全角文字=2バイト文字という概念に捕らわれてすっかり忘れていました・・・。
御指摘の通り、上記内容の記述を見落としておりました。
GBコードには4バイト文字なんてのもあるんですね。勉強になりました。
ありがとうございました。以上で質問を締めさせて頂きます。
No.2
- 回答日時:
お世話になります。
単純に、これではだめなんでしょうか。
Dim bytes As Byte() = System.Text.Encoding.Default.GetBytes(Me.TextBox1.Text)
' 韓国語
Dim kr1 As String = System.Text.Encoding.GetEncoding(51949).GetString(bytes) ' 韓国語 (EUC-KR, KS X 1001)
Dim kr2 As String = System.Text.Encoding.GetEncoding(50225).GetString(bytes) ' 韓国語 (ISO-2022-KR)
Dim kr3 As String = System.Text.Encoding.GetEncoding(949).GetString(bytes) ' 韓国語 (Windows, UHC)
' 中国語
Dim ch1 As String = System.Text.Encoding.GetEncoding(51936).GetString(bytes) ' 簡体字中国語 (GB2312)
Dim ch2 As String = System.Text.Encoding.GetEncoding(54936).GetString(bytes) ' 簡体字中国語 (GB18030)
Dim ch3 As String = System.Text.Encoding.GetEncoding(52936).GetString(bytes) ' 簡体字中国語 (HZ)
Dim ch4 As String = System.Text.Encoding.GetEncoding(936).GetString(bytes) ' 簡体字中国語 (Windows, GBK)
GetEncoding の引数はこちらを参考にしました。
http://www.hitachi-to.co.jp/prod/prod_2/inter/em …
naganaga_001さん、ありがとうございます。
例示して頂いたコードを元に、各コードページ毎にByte単位で
各国語の文字コードを取得してみました。
テキストボックスに「阿」を入力し、以下のコードを実行しました。
' 韓国文字コード
Dim krb1 As Byte() = System.Text.Encoding.GetEncoding(51949).GetBytes(Me.TextBox1.Text) ' 韓国語 (EUC-KR, KS X 1001)
Dim krb2 As Byte() = System.Text.Encoding.GetEncoding(50225).GetBytes(Me.TextBox1.Text) ' 韓国語 (ISO-2022-KR)
Dim krb3 As Byte() = System.Text.Encoding.GetEncoding(949).GetBytes(Me.TextBox1.Text) ' 韓国語 (Windows, UHC)
' 中国語文字コード
Dim chb1 As Byte() = System.Text.Encoding.GetEncoding(51936).GetBytes(Me.TextBox1.Text) ' 簡体字中国語 (GB2312)
Dim chb2 As Byte() = System.Text.Encoding.GetEncoding(54936).GetBytes(Me.TextBox1.Text) ' 簡体字中国語 (GB18030)
Dim chb3 As Byte() = System.Text.Encoding.GetEncoding(52936).GetBytes(Me.TextBox1.Text) ' 簡体字中国語 (HZ)
Dim chb4 As Byte() = System.Text.Encoding.GetEncoding(936).GetBytes(Me.TextBox1.Text) ' 簡体字中国語 (Windows, GBK)
結果は以下の通りでした。
中国語のコードページに従った文字コード
CP51936:0xB0A2 (2Bytes)
CP54936:0xB0A2 (2Bytes)
CP52936:0x7E7B30217E7D (6Bytes)
CP936:0xB0A2 (2Bytes)
韓国語のコードページに従った文字コード
CP51949:0xE4B9 (2Bytes)
CP50225:0x1B2429430E64390F (8Bytes)
CP949:0xE4B9 (2Bytes)
全角文字は2Bytesのはずなのですが、CP52936とCP50225で6Bytes、8Bytes取得してしまいました。
6Bytes文字コード中には0x3021、8Bytes文字コード中には0x6439があり、
一見、取得したい値が含まれているようにも見えます・・・。この文字コードは何なのでしょうか?
引き続き、私も調査を続けます。
CP52936、CP50225の仕様についてご存知の方がいらっしゃいましたらご教示頂けましたら幸いです。
No.1
- 回答日時:
shift化でないという但し書きがあるので、ひょっとしたら
JIS X 0208でいうところの 区点コードとかいわゆるJISコードでの
値が欲しいということでしょうか?
「GBK」という名前でいうと、質問者さんが言うところの
「shift化」した値を集めたエンコーディングだと思うのですが。
East Asian Character Sets Overview: Chinese
http://www.asahi-net.or.jp/~EZ3K-MSYM/charsets/c …
韓国語のコードはよく知りませんが、事情としては同じだと思います。
East Asian Character Sets Overview: Korean
http://www.asahi-net.or.jp/~EZ3K-MSYM/charsets/c …
>shift化でないという但し書きがあるので、ひょっとしたら
>JIS X 0208でいうところの 区点コードとかいわゆるJISコードでの
>値が欲しいということでしょうか?
仰るとおり、日本のSJIS→JIS変換の様なことを中国語、韓国語でも
やりたいと思っております。
GBKという名前はsakusaker7さんのリンクされているページを拝見すると
間違っていますね。申し訳ありません。
韓国のKSコードについては、ShiftKSコードというものがあるようです。
引き続き、変換の為に役立つ資料等がありましたらよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# S-JIS → JIS コード変換するには 3 2023/02/09 23:55
- その他(IT・Webサービス) サイト。お問い合わせコードを抜き取り、このコードに、返信文字を入力 して、相手に送信は可能ですか。 1 2023/05/18 13:18
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) ExcelVBAでユーザーフォームでテキストボックスなどからセルに連続して入力するコーディングの際の 2 2022/06/29 22:51
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
欠番の抽出について
-
ExcelのVBAコードについて教え...
-
オートフィルタで抽出結果に 罫...
-
access2003 クエリSQL文に...
-
ExcelのVBAコードについて教え...
-
VLookup関数を使ってラベルに表...
-
Exel VBA 別ブックから該当デ...
-
2つのチェックボックスを制御
-
chatgptでつくってもらったコー...
-
【VB6】実行ファイルとした後、...
-
COBOLの文法
-
VBA 現在のセル番地を記憶、復...
-
Outlook VBAについて
-
AccessVBAで、二次元配列を動的...
-
変数名「cur」について
-
VBAのフィルター操作
-
VBSでメール内容を指定のエクセ...
-
ACCESSユニオンクエリでORDER B...
-
ビジュアルスタジオの警告が出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
ExcelのVBAコードについて教え...
-
Exel VBA 別ブックから該当デ...
-
chatgptでつくってもらったコー...
-
PreviewKeyDownイベントが2回...
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
JANコードとPOSコードは同じ?
-
JavaScript|特定URLだった時、...
-
ACCESSユニオンクエリでORDER B...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
エクセルに見えない文字(JISX0...
-
COBOLの文法
-
Gitのクローンについて
-
Outlook VBAについて
おすすめ情報