• 締切済み

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)

  • chie65535
  • ベストアンサー率43% (8519/19367)
回答No.1

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

webuser
質問者

お礼

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

関連するQ&A

  • vb.net IVSの漢字を1文字切り出す方法

    vb.net IVSの漢字を1文字切り出す方法 花という漢字の異体字がセットされた文字列があるとします。 U+82B1 + U+E0103の草冠が++の花の異体字です。 Dim String1 as String = ChrW(&H82B1) & ChrW(&HDB40) & ChrW("&HDD03") この文字列String1 から頭の”1文字”を切り出す方法を教えて下さい。 mid(String1 ,1,1) とすると、異体字の花ではなく、通常の花が出ます。 1文字ではなく、文字の本体部分だけ切り出してしまい、”1文字”を切り出す事ができません。

  • VB2005でJIS拡張漢字の各文字コードを取得する方法

    ある関数に文字列を渡して各文字コードを取得するプログラムを作成しようとしています。 基本的な文字のコードは取得できるのですが、JIS拡張漢字のほとんどが正しく取得できません。 失敗している文字は内部的に「?」(3F)となってしまいます。 例:拡張漢字のコード値(SJIS:81B2)を変換するとコード値が「3F」になってしまう。(テキストエディタなどで文字化けすると「?」に化けるのと同じなのかな?) 正しく文字コードを取得する方法をご存知の方、またヒントなどありましたらよろしくお願いします。 【環境】WindowsXP     VisualBasic2005 【プログラムの流れ】例:SJISコードを取得する場合 文字列を受取る→1文字取得→System.Text.EncodingでSJIS指定のバイト型配列文字に変換(文字コードを取得)

  • VB2005 Replace 文字の置換え

    逆引き大全500の「183 文字列の中の指定した文字を別の文字に置き換える」の項なのですが・・・ ご存知の方がいらっしゃいましたらよろしくお願い致します。 TextBox1 に「今日は本当に天気が良くて」と入力し、 ボタンを押すと「本当」という漢字を「ホント」というカタカナに 置き換えて Label1 に表示するコードなのですが Dim Text1 As String = TextBox1.Text Label1.Text = Text1.Replace("本当","ホント") という記述になっています。 これで実際に動いたのですが、この記述だと、一文字だけしか置換えできません。 ですが、「本当」だけではなく、「天気」という漢字も「テンキ」というカタカナに置き換えたいのです。 テキストボックスに表示された 「今日は本当に天気が良くて」を一度に 「今日はホントにテンキが良くて」と置き換える方法は ありますでしょうか?よろしくお願い致します。

  • この漢字の区点コードは?

    漢字に関することなので、此処(国語カテゴリ)で質問しますが、より適切なカテゴリがあればその旨をお知らせください。そちらで再質問します。 添付図は Excel 2002 の画面だけど、セル B1、D1、B3 の漢字の区点コードを教えてください。手元の辞典(小学館現代漢語例解辞典第二版)にはそれが表示されていないのでお尋ねしています。 ちなみに、当該文字はそれぞれ左隣の文字のいわゆる“異体字”あるいは“旧字”と称される漢字です。 なお、セル A2 の値は式 =CODE(A1) の結果値を示しています。此れはセル A1 の漢字「崎」の JISコード(十進表記)である、が私の理解です。

  • VBAでコードから漢字に変換するのは

    VBAを使用していますが、コードから漢字を求める方法が見つかりません。 たとえば、3021から漢字の亜を求めたいのですが。 1バイト文字ならChr関数で求められますが、2バイト文字、つまり、漢字を求める方法が見つからないのです。 どなたか教えていただきたいのですが。

  • 漢字コードの変換について

    漢字コードの変換について 1. インターネットで漢字等の二バイト文字で検索すると、漢字が変換されているようです。 "画像"の場合"%E7%94%BB%E5%83%8F"と、変換されます。 この変換は何でしょうか? 2. htmlのファイル名には漢字を使用できませんが、漢字をこのように変換すると使用できるのでしょうか? 3. 変換する(フリー)ソフトは有るのでしょうか?

  • 漢字コードから入力するには

    特殊漢字の入力方法教えてください。 電子申請の申請用FDに特殊漢字の名前を入力したいのです。 一般的には”昴”でいいのですが第2水準にもありません。 GT 17493番 読み:こう、たかぶる、あきら、たか、あがる だそうです。 JEFコード:B9B7 東芝区点コードE8087 です。 textで表示されればコピペして使います。

  • VB2008、文字色について教えて下さい

    VB2008を使用しています。 現在、Form内複数あるTextBox内の文字をいくつか選択し、RichTextBox内に"・"で区切って代入するプログラムを作成しています。 その際、RichTextBox内に代入されたTextBoxの文字色を赤色に変える(元は黒色です)コードを下記のように作成しました。 Dim strList() As String strList = RichTextBox1.Text.Split("・"c) For Each strMoji As String In strList Select Case strMoji Case TextBox1.Text TextBox1.ForeColor = Color.Red Case TextBox2.Text TextBox2.ForeColor = Color.Red End Select Next 上記コードは問題ないのですが、RichTextBox内に一度代入された複数のTextBoxの文字から、いくつかを選択して削除した際、選択したTextBoxの文字を元の黒色に戻す方法がわかりません。単純に全てのTextBoxの文字色を黒色に戻すコードを書いてしまうと、同様の操作を他のRichTextBoxに適用した場合、そちらに代入された文字色も黒色に戻ってしまいます。上記のコードを応用すれば出来そうなのですが、良い方法はないでしょうか?上記コード3行目の「In」を「Out」や「Cut」に変更しても構文エラーになってしまいました。

  • 「C#」文字コードの取得&文字変換

    C#で文字コードを調べるプログラムを作成しています。 そこで2つ質問をさせてください。 1つ目(文字コード調べ) TextBoxに漢字を入力して,各エンコーディングの文字コードを調べるときに,UNICDEの場合, Encoding enc_default = Encoding.GetEncoding(932); string input = tb_input.Text; byte[] byte_input = enc_default.GetBytes(input); string outtext_unicode = ""; Encoding enc_unicode = Encoding.Unicode; byte[] byte_unicode = Encoding.Convert(enc_default,enc_unicode, byte_input); foreach (byte b in byte_unicode) { outtext_unicode += string.Format("{0:X}", (int)b); } tb_output_unicode.Text = outtext_unicode; とすると,調べたい文字コードがLE(リトルエディアン)で出力されます。これをBE(ビッグエディアン)で出力されるにはどうしたらよいでしょうか? ご存知の方がいらっしゃいましたら,ぜひ教えてください。 よろしくお願いいたします。 2つ目(文字コードから文字を取得する) 上記の質問と逆のパターンで,TextBoxに文字コードを入力してもらい,人間が読める文字に変換する場合下記のようなコードを書くと, string codePoint_string = tb_output_unicode.Text; int codePoint = int.Parse(codePoint_string); char c = (char)codePoint; tb_input.Text = Convert.ToString(c); ASCIIの文字コードを入力した場合には,きちんと変換してくれるのですが,漢字の文字コードを入力すると,FormatExceptionが発生します。 何か勘違いをしているのかもしれませんが,いまいちやり方が創造できません。 こちらも,ご存知の方がいらっしゃいましたら,ご教示願います。

  • VB2010で簡単なプログラムが動かないのです・・

    説明が下手なのでそのままプログラムを書きます。 ListOfficeからShowDialogでDForm1を開いています。 さらにDForm1からShowDialogでStart_Formを開いて閉じるボタンで以下の命令と実行したいのですが・・・・ ListOffice.Text = Me.TextBox1.Text →OKで動きました DForm1.Text = Me.TextBox1.Text  →NG 動きません・・・ DForm1でその他にもTextboxでやってみましたが、それでも動かないのです・・・・ 原因不明です・・・・ 以前、ほかのプログラム作成の時は動いたのですが・・・ DForm1.Text = Me.TextBox1.Textの下にMsgbox(DForm1.Text)を入れて確認してみたらMe.TextBox1.Textの文字がきちんと表示されました。 ご協力お願い致しますm(__)m Public Class Start_Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click DForm1.Text = Me.TextBox1.Text ListOffice.Text = Me.TextBox1.Text Me.Close() End Sub End Class

専門家に質問してみよう