Может кто-нибудь, пожалуйста, предоставьте мне некоторые важные аспекты, о которых я должен знать при работе с строками Unicode в C#?Каковы наилучшие методы обработки строк Unicode в C#?
ответ
C# (и .Net в целом) обрабатывает строки unicode прозрачно, и вам не нужно делать ничего особенного, если вашему приложению не нужно читать/записывать файлы с определенными кодировками. В таких случаях вы можете преобразовать управляемые строки в байтовые массивы кодировки по вашему выбору, используя классы в пространстве имен System.Text.Encodings.
Только подумайте о кодировании при чтении и записи потоков. Используйте TextReader и TextWriters для чтения и записи текста в разных кодировках. Всегда используйте utf-8, если у вас есть выбор.
Не путайте языки и культуры - это совершенно отдельная проблема из юникода.
.Net имеет относительно хорошую поддержку i18n. Вам действительно не нужно думать о unicode так сильно, как все строки .Net и встроенные строковые функции делают правильные вещи с помощью unicode. Единственное, что нужно иметь в виду, это то, что большинство строковых функций, например DateTime.ToString(), по умолчанию используют культуру потока, которая по умолчанию является культурой Windows. Вы можете указать другую культуру для форматирования либо по текущему потоку, либо по каждому вызову метода.
Единственный раз, когда unicode является проблемой при кодировании/декодировании строк в и из байтов.
Имейте в виду, что строки C# являются сегментами кодовых блоков Char, UTF-16. Это не Код Юникода. Для некоторых кодов Unicode требуется два Char, и вы не должны разделить строки между этими Chars.
Кроме того, юникодные коды могут объединяться для формирования символа одного языка - например, «u» Char, за которым следует umlat Char. Таким образом, вы не можете разделить строки между произвольными кодовыми точками.
В принципе, это путаница проблем, когда любая проблема может только на практике повлиять на языки, которых вы не знаете.
Как уже упоминалось, строки .NET обрабатывают Unicode прозрачно. Помимо ввода/вывода файлов, другое соображение будет на уровне базы данных. Например, SQL Server различает VARCHAR (не Unicode) и NVARCHAR (который обрабатывает unicode). Также необходимо обратить внимание на параметры хранимой процедуры.
System.String уже обработал unicode внутри, так что вы там покрыты. Лучшей практикой было бы использовать System.Text.Encoding.UTF8Encoding при чтении и записи файлов. Однако это больше, чем просто чтение/запись файлов, все, что передает данные, включая сетевые подключения, зависит от кодировки. Если вы используете WCF, для большинства привязок он будет по умолчанию UTF8 (на самом деле большинство вообще не разрешают ASCII).
UTF8 - хороший выбор, потому что, хотя он по-прежнему поддерживает весь набор символов Юникода, для большей части набора символов ASCII он имеет байтовое сходство. Таким образом, наивные приложения, которые не поддерживают Unicode, имеют некоторую возможность чтения/записи данных ваших приложений. Эти приложения будут только терпеть неудачу, когда вы начнете использовать расширенные символы.
System.Text.Encoding.Unicode будет писать UTF-16, который имеет минимум два байта на символ, что делает его более крупным и полностью несовместимым с ASCII. И System.Text.Encoding.UTF32, как вы можете догадаться, еще больше. Я не уверен в использовании в реальном времени UTF-16 и 32, но, возможно, они работают лучше, когда у вас есть большое количество расширенных символов.Это всего лишь теория, но если это так, то японские и китайские разработчики, создающие продукт, который будет использоваться в основном на этих языках, могут найти UTF-16/32 лучший выбор.
Более подробную информацию можно найти на этой теме:
http://discuss.joelonsoftware.com/default.asp?dotnet.12.189999.12
- 1. Каковы наилучшие методы обработки исключений в C#?
- 2. Каковы наилучшие методы авторизации?
- 3. Каковы наилучшие методы сортировки?
- 4. Каковы наилучшие методы регистрации ошибки?
- 5. Каковы наилучшие методы обработки данных базы данных в режиме «тест»?
- 6. Каковы наилучшие методы обработки неизвестных URL-адресов в веб-приложении?
- 7. Каковы наилучшие методы мониторинга DelayedJob?
- 8. Каковы наилучшие методы программирования ColdFusion?
- 9. Каковы наилучшие методы поиска дельта?
- 10. Каковы наилучшие методы кэширования данных?
- 11. Каковы наилучшие методы взаимодействия языков?
- 12. Каковы наилучшие методы управления DataContext?
- 13. Каковы наилучшие методы обработки маршрутов с помощью подобных действий?
- 14. Каковы наилучшие методы обработки часто изменяющихся часовых поясов
- 15. Каковы наилучшие методы обработки выгружаемых данных на серверах FHIR?
- 16. Каковы наилучшие методы регистрации ошибок в ASP.NET?
- 17. Каковы наилучшие методы построения сервера SMS
- 18. Каковы наилучшие методы предварительной выборки в backbone.js?
- 19. Каковы наилучшие методы управления ExecutorService в библиотеке?
- 20. Каковы наилучшие методы локализации в Умбрако?
- 21. Каковы наилучшие методы использования CSS3/JS/jQuery?
- 22. Каковы наилучшие методы для атрибута AspNetDevelopmentServerHost?
- 23. C# /. Net: Каковы наилучшие методы настройки базового пути ResXResourceReader?
- 24. Каковы наилучшие методы для большой непрерывной интеграции?
- 25. Каковы наилучшие методы предотвращения SQL Creep?
- 26. Каковы наилучшие методы безопасного преобразования типов в C#?
- 27. Каковы наилучшие методы прилова COM-исключения в C#?
- 28. Каковы наилучшие методы для реализации оператора == для класса в C#?
- 29. Каковы наилучшие методы для версий XML-схем?
- 30. Каковы наилучшие методы разработки согласованных библиотек?