Немного про UTF-16 и отличие от UTF-8

Как мы знаем, все строчки в коде msvs обрабатываются как utf-16, хотя формально мы их называем как utf-8. Отличие заключается в нижних и верхних суррогатах, которые не понятно вообще зачем нужны. Проблема может возникнуть при индексировании разных текстов, когда идет вызов WCF сервиса и ему в параметре передается UTF-16 строчка, а сам сервис должен передавать в utf-8, поэтому найдя символ из utf-16 все успешно проваливается с сообщением - Unable to translate Unicode character \uDE09 at index 0 to specified code page. Один из сложных и рекомендуемых способов - переопределить кодировщик у WCF сервиса, однако можно и ручками предварительно перекодировать строчку, чтобы быть уверенным, что она содержит только utf-8 коды.
Copy Source | Copy HTML
  1. private static readonly Encoding Utf8Encoder = Encoding.GetEncoding(
  2.                 "UTF-8",
  3.                 new EncoderReplacementFallback(string.Empty),
  4.                 new DecoderExceptionFallback()
  5. );
  6. text = Utf8Encoder.GetString(Utf8Encoder.GetBytes(text""));

Метки:   Категории:Code


blog comments powered by Disqus

Добавить комментарий

Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Не отображать

Topbot at FeedsBurner

Облако тэгов

Мои Твиты

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008