Visual Basic サンプル集 |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
文字コードから文字を取得する
2022/8/21
→ C# のサンプルに切り替える → Python のサンプルに切り替える
目次
Unicode の文字コード(コードポイント) 29E3D の文字を取得する
Dim st As String = System.Text.Encoding.UTF32.GetString(BitConverter.GetBytes(&H29E3D))
Debug.WriteLine(st) '𩸽
これでもできます。
Dim st As String = Char.ConvertFromUtf32(&H29E3D)
Debug.WriteLine(st) '𩸽
メモ:Char.ConvertFromUtf32 で コードポイント D800 ~ DFFF を指定するとArgumentOutOfRangeExceptionの例外になります。この範囲はサロゲート領域で、単独では文字は割り当てられていません。
これでもできます。
Dim rune As New System.Text.Rune(&H29E3D)
Dim st As String = rune.ToString
Debug.WriteLine(st) '𩸽
メモ:Runeのコンストラクターでコードポイント D800 ~ DFFF を指定するとArgumentOutOfRangeExceptionの例外になります。この範囲はサロゲート領域で、単独では文字は割り当てられていません。
Shift_JISの文字コード 88C0 の文字を取得する
#If NETCOREAPP Then
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
#End If
Dim code As Integer = &H88C0
Dim sjis = System.Text.Encoding.GetEncoding("shift_jis")
Dim st As String = sjis.GetString(BitConverter.GetBytes(code).Reverse.ToArray).Last
Debug.WriteLine(st) '安
参考:Unicodeのコードポイントから文字を取得する方法の比較
方法 | 評価 (※1) |
変換可能な範囲 (※2) |
備考 |
---|---|---|---|
Encoding.UTF32.GetString | A | すべて (0000 ~ 10FFFF) |
複数の文字を変換可能 |
Char.ConvertFromUtf32 | B | 0000 ~ D7FF E000 ~ 10FFFF |
|
Runeのコンストラクター | B | 0000 ~ D7FF E000 ~ 10FFFF |
2019年に追加された新機能 |
ChrW | C | 0000 ~ D7FF E000 ~ FFFF |
可能な場合、定数として扱われます。 |
Convert.ToChar | C | 0000 ~ D7FF E000 ~ FFFF |
|
Chr | D | 0000 ~ 00FF | 現在のコードページによって変換不可能な文字あり |
※1:評価の目安
A: これを使っておけばよいと思います。よくわからない人はこれを使いましょう。
B: これでも問題ないです。D800~DFFFを変換しようとすると例外になりますが、この範囲には通常の文字は割り当てられていないので、例外が発生する方がむしろ親切なときもあります。
C: 役に立つときもありますが、使用に注意が必要なので手を出さない方が無難です。Unicodeの基本多言語面しか対応していないので、一部の絵文字やかなり難しい一部の漢字など対応していない文字があります。
D: お勧めしません。
※2:Unicodeのコードポイント。16進数で表記しています。
VB6では Chr や ChrW などを使用します。Unicode への対応はかなり面倒なはずです。