Как инициализировать константу неразрывным пробелом?

#vb.net #encoding #character-encoding #constants

#vb.net #кодирование #кодировка символов #константы

Вопрос:

У меня есть этот код, написанный на c #, и он действителен и работает.

 public const char NBSP = 'u00A0';
  

По некоторым причинам мне нужно написать этот метод в VB.net . Я пробовал эти:

1.

 Public Const NBSP As Char = "u00A0"
  

Ошибка: Option Strict On disallows implicit conversions from 'String' to 'Char'

2.

 Public Const NBSP As Char = "u00A0"c
  

Ошибка: Character constant must contain exactly one character.

3.

 Public Const NBSP As Char = amp;HA0 'Or 0x00A0
  

Ошибка: целочисленные значения не могут быть преобразованы в символ.

Примечание: я не могу использовать ChrW() функцию. Ни Convert.ToChar() то, ни другое, поскольку это Const . Одним из решений может быть удаление ключа Const, но для меня это выглядит некрасиво.

Я думаю, что мне следует использовать String вместо Char тип данных. Но не уверен, может ли это вызвать какие-либо проблемы?

 Public Const NBSP As String = "u00A0"
  

Есть предложения?

Ответ №1:

Разные методы.

Используя целое число для сохранения значения, затем преобразуйте его с char помощью ChrW():

 Dim nbs1 As Integer = amp;HA0
Console.WriteLine("NBS" amp; New String({ChrW(nbs1)}))
  

Использование массива байтов и вызов Encoding .Юникод.getString() для преобразования массива байтов в строку. Обратите внимание, что порядок байтов инвертирован:

 Dim nbs2 As Byte() = {amp;HA0, amp;H0}
Console.WriteLine("NBS" amp; Encoding.Unicode.GetString(nbs2))
  

Использование регулярных выражений.Unescape() для преобразования символа, экранированного в Юникоде «uXXXX», в строку:

 Dim nbs3 As String = "u00A0"
Dim nbs4 = "NBS" amp; Regex.Unescape(nbs3)
Console.WriteLine(nbs4)