C #, UTF-8 и кодировка символов - PullRequest
5 голосов
/ 29 января 2011

Это выстрел в темноте, и я заранее извиняюсь, если этот вопрос звучит как бред сумасшедшего.

В рамках интеграции с третьей стороной мне нужно UTF8-кодировать некоторую строковую информацию, используя C #, чтобы я мог отправить ее на целевой сервер через многочастную форму. Проблема в том, что они отклоняют некоторые из моих представлений, возможно потому, что я неправильно кодирую их содержание.

Сейчас я пытаюсь выяснить, как тире или дефис - я не могу сказать, что это, просто глядя на него - получен или интерпретирован целевым сервером как ?~@~S (да, это строка из 5 символов, и ваш браузер не дает сбоя). И, к сожалению, у меня недостаточно глубокого понимания Encoding.UTF8.GetBytes(), чтобы знать, как использовать байтовый массив, чтобы начать определять, где может быть проблема.

Если кто-нибудь может дать какие-либо советы или рекомендации, я был бы очень признателен. До сих пор моим единственным другом был MSDN, и в этом мало кто знает.

ОБНОВЛЕНИЕ 1 : После еще нескольких копаний я обнаружил, что использование System.Web.HttpUtility.UrlEncode() для кодирования символа EM DASH ("-") закодирует его в "% e2% 80% 94" .

В настоящее время я отправляю эту информацию в сообщении HttpWebRequest с типом содержимого "application / x-www-form-urlencoded" - может ли это быть причиной проблемы? И если да, то как правильно кодировать серию пар имя-значение, значения которых могут содержать символы Unicode, чтобы сервер мог ожидать запрос UTF-8?

Ответы [ 2 ]

3 голосов
/ 29 января 2011
byte[] test = System.Text.Encoding.UTF8.GetBytes("-");

Должен дать вам

test[0] = 0x2D (45 as integer).  

Убедитесь, что вы отправляете 0x2D на целевой сервер.

1 голос
/ 29 января 2011

Возможно, вам понадобится добавить параметр "charset = utf-8" в ваш заголовок Content-Type. Вы также можете захотеть иметь заголовок Content-Encoding для установки своей кодировки. Заголовки должны содержать следующее:

Content-Type: multipart / form-data;charset = utf-8

В противном случае веб-сервер не будет знать, что ваши байты являются байтами UTF-8, поэтому он их неправильно интерпретирует.

...