Имя локализованной кодировки в .NET 4.0 - PullRequest
3 голосов
/ 01 января 2012

Как получить локализованное имя кодировки в .Net Framework версии 4.0?

При работе на японском компьютере (региональные настройки)

эта строка кода:

Encoding.GetEncodings()[0].DisplayName

при работе в .Net 2 возвращает строку «IBM EBCDIC (US - カ ナ ダ)»

при работе в .Net 4 возвращает строку «IBM EBCDIC (США-Канада)»

Нынешняя культура "ja-JP" в обоих случаях.

Ответы [ 2 ]

3 голосов
/ 01 января 2012

Трудно догадаться, у класса Encoding нет свойства DisplayName .Если вы действительно имели в виду EncodingName , то да, возвращаемое имя локализовано и зависит от языкового пакета, установленного на компьютере.Похоже, у вас установлен японский языковой пакет для .NET 2.0, но не для .NET 4.0.

Вы можете скачать его здесь .Измените язык, прежде чем нажимать кнопку загрузки.

2 голосов
/ 01 января 2012

Encoding.GetEncodings() - это просто список всех доступных кодировок в системе. Вы не должны ожидать, что индекс с индексом 0 будет вашей системой по умолчанию. Используйте следующий код, чтобы получить кодировку, соответствующую вашей текущей культуре потока

Encoding.GetEncoding(Thread.CurrentThread.CurrentCulture.TextInfo.ANSICodePage)

Или, возможно, вы хотите использовать свойство EBCDICCodePage, чтобы оно более соответствовало предоставленным вами кодировкам. Трудно сказать, не зная, для чего именно это нужно.

Я подозреваю, что вы на самом деле ищете текущую культуру

Thread.CurrentThread.CurrentCulture.DisplayName

а не кодировка, иначе почему бы вам просто не использовать UTF-8? Или, если вы ищете отображаемое имя культуры "ja-JP", то это должно сделать это

new CultureInfo("ja-JP").DisplayName
...