Замена 3-байтовой строки UTF-8 в .NET (преобразование 3-байтового UTF-8 в строку или символ) - PullRequest
0 голосов
/ 10 августа 2009

У меня есть строка кодирования UTF-8, которую я получаю при чтении PDF, и я пытаюсь удалить некоторые символы, которые представляют пробелы, но не закодированы как стандартный пробел 0x20. Моя проблема в том, что символы представлены 3 байтами UTF-8, и я не могу понять, как передать это в строку или символ, чтобы я мог сделать замену. Два символа UTF-8, которые я пытаюсь заменить, это 0xE28087 и 0xE28088.

Я пробовал Chr и ChrW, которые принимают целочисленные параметры только до 65000 (предположительно элементы, которые могут быть представлены одним байтом в UTF-8)

Я также попытался использовать System.Text.Encoding.UTF8.GetChars () с байтовым представлением моих символов, но в результате получается 4 символа вместо одного - IE интерпретирует мой 3-байтовый символ как отдельный байтовые символы

    Dim ResultChars() As Char
    Dim bytes() As Byte
    Dim SpaceChar As Int32

    SpaceChar = Integer.Parse("E28087", Globalization.NumberStyles.HexNumber)
    bytes = BitConverter.GetBytes(SpaceChar)
    ResultChars = System.Text.Encoding.UTF8.GetChars(bytes)
    For Each ResultChar In ResultChars
        Debug.WriteLine(ResultChar)
    Next

То, что я пытаюсь сделать в псевдокоде, просто: ConvertedText = ConvertedText.Replace (StringOrCharofThisUnicodeCharacter ("0xE28087"), "")

1 Ответ

2 голосов
/ 10 августа 2009

Вы смешиваете кодовые точки с кодировкой UTF-8. Внутренне все строки .NET используют UTF-16, поэтому вам просто нужно указать кодовую точку Unicode, не байтовые данные UTF-8:

Const FigureSpaceChar As Char = ChrW(&H2007)

Кодовая точка от www.fileformats.info .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...