Как кодировать Unicode, чтобы и iPad, и Excel могли понять? - PullRequest
4 голосов
/ 23 июня 2011

У меня есть CSV, который закодирован с UTF32.Когда я открываю поток в IE и открываю в Excel, я могу читать все.На iPad я транслирую и получаю пустую страницу без какого-либо контента.(Я не знаю, как просматривать исходники на iPad, чтобы в HTML могло быть что-то скрытое).

Ответ http написан на asp.net C #

Response.Clear();
Response.Buffer = true;

Response.ContentType = "text/comma-separated-values";
Response.AddHeader("Content-Disposition", "attachment;filename=\"InventoryCount.csv\"");

Response.RedirectLocation = "InventoryCount.csv";
Response.ContentEncoding = Encoding.UTF32;//works on Excel wrong in iPad
//Response.ContentEncoding = Encoding.UTF8;//works on iPad wrong in Excel

Response.Charset = "UTF-8";//tried also adding Charset just to see if it works somehow, but it does not.
EnableViewState = false;

NMDUtilities.Export oUtilities = new NMDUtilities.Export();

Response.Write(oUtilities.DataGridToCSV(gvExport, ","));

Response.End();

Единственное, что я могу сделать, это то, что iPad не может читать UTF32, это правда?Как я могу просмотреть источник на iPad?

UPDATE Я только что сделал интересное открытие.Когда я использую кодировку UTF8, на iPad все работает, и символы отображаются правильно, но в Excel все перепутано.Но когда я использую UTF32, обратное верно.iPad ничего не отображает, но Excel работает отлично.Я действительно понятия не имею, что я могу с этим поделать.

Выходы iPad UTF8 = "Quattrode®"Выходы Excel UTF8 = "Quattrode®"

Выходы iPad UTF32 = ""Выходные данные Excel UTF32 = "Quattrode®"

Вот моя реализация DataGridToCsv

public string DataGridToCsv(GridView input, string delimiter)
{
    StringBuilder sb = new StringBuilder();

//iterate Gridview and put row results in stringbuilder...
   string result = HttpUtility.HtmlDecode(sb.ToString());
   return result;
}

ОБНОВЛЕНИЕ2 Excel работает с UTF8 >: {.Мужчина.Я просто отменил второй вариант, который он перечисляет, потому что он не работает на iPad.Я не могу выиграть, потому что проиграл.

UPDATE3 По вашим предложениям я посмотрел на шестнадцатеричный код.Спецификации нет, но есть различие между форматами файлов.

UTF8 4D 61 74 65 (MATE от первого слова МАТЕРИАЛ)UTF32 4D 00 00 00 (M от первого слова МАТЕРИАЛ)

Так что, похоже, UTF32 выкладывает вещи в 32 бита, а UTF8 делает это в 8 битах.Я думаю, именно поэтому Excel может догадаться.Сейчас я попробую предложенные вами исправления.

Ответы [ 2 ]

7 голосов
/ 24 июня 2011

Проблема в том, что браузер знает, что ваши данные кодируются как UTF-8, но он не может сообщить Excel.Когда Excel открывает файл, он принимает кодировку вашей системы по умолчанию.Если вы скопируете какой-то текст, отличный от ASCII, вставьте его в Блокнот и сохраните его в кодировке UTF-8, однако вы увидите, что Excel может правильно его обнаружить.Он работает на iPad, потому что его кодировкой по умолчанию является UTF-8.начало файла.Вы можете попробовать это самостоятельно, используя шестнадцатеричный редактор или другие средства, чтобы создать файл, содержащий

EF BB BF 20 51 75 61 74 74 72 6F 64 65 C2 AE 20

, и открыть этот файл в Excel.(Я использовал Excel 2010, но я предполагаю, что он будет работать со всеми последними версиями.)

Попробуйте убедиться, что ваш вывод начинается с этих первых 3 байтов.

Как написать спецификацию на C #

    byte[] BOM = new byte[] { 0xef, 0xbb, 0xbf };
    Response.BinaryWrite(BOM);//write the BOM first
    Response.Write(utility.DataGridToCSV(gvExport, ","));//then write your CSV
2 голосов
/ 24 июня 2011

Excel пытается определить кодировку на основе содержимого вашего файла, и ASCII и UTF-8 случайно перекрываются с первыми 128 символами (буквами и цифрами).Когда вы используете UTF-16 и UTF-32, он может выяснить, что контент не является ASCII, но, поскольку большая часть вашего контента, использующего UTF-8, соответствует ASCII, если вы хотите, чтобы ваш файл читался как UTF-8,Вы должны четко указать, что это UTF-8, написав метку порядка байтов, как сказал Гейб в своем ответе.Также см. Ответ Эндрю Чонтоса на этот другой вопрос:

Каков наилучший способ экспорта данных UTF8 в Excel?

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