2009-08-10 1 views
0

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

Я попытался Chr и ДЖД, которые только принимают целые параметры до 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 

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

ответ

2

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

Const FigureSpaceChar As Char = ChrW(&H2007) 

от www.fileformats.info элемент кода.

+0

.NET использует UTF-16, а не UTF-32. (Каждый символ является кодовой точкой UTF-16.) –

+0

Джон: Конечно. Опечатка. Спасибо, что заметили это. –

+0

Отлично работает, спасибо большое. Для других, читающих другое пространство, я пытаюсь заменить ChrW (& H2008) с того же сайта. –

 Смежные вопросы

  • Нет связанных вопросов^_^