Здесь есть два фактора. Во-первых:
кажется, что это неправильно, поскольку информация уже содержится в ответе HTTP
Да, он выглядит неправильно, но WebClient.Encoding в Microsoft .NET по умолчанию идентичен System.Text.Encoding.Default .
MSDN цитата:
Значением по умолчанию для этого свойства является кодировка, возвращаемая по умолчанию.
Как таковая реализация Mono (и MonoTouch) WebClient
ведет себя идентично . Это часто упускается из виду (работает в большинстве случаев), но это источник трудно найти (не MonoTouch, но специфично для .NET) ошибок, поскольку нет гарантии о том, что Default
значение может быть.
MSDN цитата:
Разные компьютеры могут использовать разные кодировки по умолчанию, и кодировка по умолчанию может даже измениться на одном компьютере.
Вторым фактором является симулятор iOS: симулятор не эмулятор. Это имеет много преимуществ (например, намного быстрее, чем эмуляторы Android), но также имеет свои недостатки (мало IMO, но это только затрудняет их поиск).
Это означает, что симулятор не пытается (сильно) скрывать базовую операционную систему (то есть OSX) при использовании общего целевого API, например, при получении кодовой страницы по умолчанию. Поскольку он возвращает другое значение, System.Text.Encoding.Default
будет инициализирован с другой кодовой страницей, что приведет к использованию другой реализации.
Таким образом, установка собственной кодировки на WebClient.Encoding
является правильным (и безопасным) способом решения вашей проблемы (для любого приложения .NET).