• 締切済み

vb.net 文字コードから漢字へ変換

vb .net で文字コードから漢字へ変換する方法を教えて下さい。 例えば 「花」という漢字のコードが"82b1" これを、表示させるために me.TextBox1.Text = 関数的なモノ("82b1") というような事はできますか? さらに、 「花」という漢字の異体字で草冠が++になっている文字が "82b1"+"e0103" これを、表示させるために me.TextBox1.Text = 関数的なモノ("82b1","e0103") というような事はできますか? ※IVS対応フォントと環境は既にあるものとします。

みんなの回答

回答No.3

Option Explicit On Option Strict On Option Infer Off Option Compare Binary Imports System Imports System.Drawing Imports System.Collections.Generic Public Class Q8738210 Inherits System.Windows.Forms.Form Private textbox1 As System.Windows.Forms.TextBox Sub New () textbox1 = New System.Windows.Forms.TextBox () textbox1.Font = new Font ("IPAmj明朝", 48) ' 配列初期化子、拡張メソッド・ラムダ式といろんな文法が登場している。 ' VBにはエスケープシーケンスがダブルクオートくらいしかないから。 ' 注目はChar.ConvertFromUtf32だ。リファレンスを見て、このメソッドが例外を投げるケースはどんな場合か確認しておこうね。 ' http://msdn.microsoft.com/en-us/library/system.char.convertfromutf32%28v=vs.110%29.aspx ' その他、こちらも例外の範囲を確認しておこう。 ' http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.chrw%28v=vs.110%29.aspx ' http://www.atmarkit.co.jp/fdotnet/dotnettips/107imports/imports.html ' ついでにこいつも読んでおく ' http://codezine.jp/article/detail/1592 ' http://ja.wikipedia.org/wiki/UTF-8#.E3.82.B5.E3.83.AD.E3.82.B2.E3.83.BC.E3.83.88.E3.83.9A.E3.82.A2.E3.81.AE.E6.89.B1.E3.81.84 textbox1.Text = (New List(Of Integer) From {&H82B1I, &HE0103I}).Aggregate("", Function(ByVal str As String, ByVal ch As Integer) (str & Char.ConvertFromUtf32(ch).ToString())) Me.Controls.Add (textbox1) ' 後で読む(回答に反映する気はない) ' http://msdn.microsoft.com/en-us/library/1k20k614%28v=vs.110%29.aspx ' http://msdn.microsoft.com/en-us/library/system.globalization.stringinfo%28v=vs.110%29.aspx End Sub Public Shared Sub Main() Dim f As Q8738210 = New Q8738210 () f.ShowDialog () End Sub End Class

回答No.2

IVS環境がなくて確認していませんが、草冠「++」の「花」は CHRW(&H82B1) & CHRW(&HDB40) & CHRW(&DD00) で出るはずです。 ここからの受け売り。 http://itpro.nikkeibp.co.jp/article/COLUMN/20100126/343783/

webuser
質問者

お礼

ありがとうございます。 Me.TextBox1.Text = CHRW(&H82B1) & CHRW(&HDB40) & CHRW(&DD00) だと 下記のエラーとなりました。 式が必要です。 'DD00' は宣言されていません。アクセスできない保護レベルになっています。 エラー箇所を修正すると Me.TextBox1.Text = CHRW(&H82B1) & CHRW(&HDB40) & CHRW(&HDD00) 普通の花が出ました。 一旦、前半部分だけにしてみると Me.TextBox1.Text = CHRW(&H82B1) やはり普通の花が出ました。 ここで初めて http://itpro.nikkeibp.co.jp/article/COLUMN/20100126/343783/ を読んでみました。 U+845BとU+E0101の場合、 UTF-16であれば「845B DB40 DD01」 UTF-8であれば「E8 91 9B F3 A0 84 81」 うーん、サッパリ分からない。 UTF-8の方が馴染みがあるが、コードの中身は全く分からない。 UTF-16の方は、845Bの前半部分が同じなので、IVSコードから見たら、規則性が、まだ分かりそう。 U+845Bが「845B」なら、 U+E0101は「DB40 DD01」か? いくつかのサンプルを見ると、 U+E01は「DB40 DD」? 単純に右の2けた以外は考えなくて良さそう。 考えが正しいかどうか分からない。 ただ、IVSフォントのところに、++の花が出る事が確認できた。 Me.TextBox1.Font = New Font("IPAmj明朝", 48) Me.TextBox1.Text = ChrW(&H82B1) & ChrW(&HDB40) & ChrW(&HDD03)

回答No.1

me.TextBox1.Text = System.Text.Encoding.UTF8.GetString(ChrW(&H82b1))

webuser
質問者

お礼

ありがとうございます。 試したところ、 型 'Char' の値を 'Byte の 1 次元配列' に変換できません。 というエラーが出ています。 ちょっと調べてみます。

関連するQ&A