Помещение строки UTF-8 в переменную типа string - PullRequest
1 голос
/ 13 сентября 2010

Что ж, извините за запутанный заголовок, но у меня немного раздражающая проблема с кодировкой символов в C # .NET

У меня есть несколько классов, сгенерированных из файлов WSDL, у этих классов есть методы, которые принимают строковые параметры, которые затем передаются в удаленный веб-сервис. Этот удаленный веб-сервис ожидает, что весь ввод текста будет в кодировке UTF-8. Теперь, насколько я могу судить, на самом деле нет способа сделать строку в C # .NET в кодировке UTF-8, это UTF-16 или ничего, если я хочу UTF-8, я должен сделать это byte[] , верно?

Итак, мой главный вопрос: как я могу поместить свои необработанные данные UTF-8 byte[] в строку, чтобы я мог на самом деле отправить их в веб-сервис? Я имею в виду, конечно, я мог бы, вероятно, прибегнуть к коду в стиле C, перебирая все байты, но наверняка Microsoft должна была подумать об этом при разработке языка и API? (хотя, так как мой ноутбук Vista думает, что вполне нормально использовать UTF-16 внутри, cp1252 для некоторых вещей, UTF-8 для некоторых других и cp850 (!) для некоторых других вещей, я не был бы слишком удивлен, если бы они этого не сделали) .

Итак, я застрял, делая ужасные вещи, или есть какой-то скрытый System.Text.EncodeStuffTherightWay.EncodeStringAsUTF8(string) метод глубоко в недрах .NET?

1 Ответ

5 голосов
/ 13 сентября 2010

Строки никогда содержат что-либо в кодировке utf- * или что-либо еще ;это не их работа.Это строки - группы символьных / кодовых данных.byte[], который у вас есть, - это закодированная форма.

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

Имейте в виду, что в самом wsdl просто есть xs:string - если этого недостаточно (то есть1011 * в сочетании с рукопожатием не достаточно), тогда он просто не является строкой веб-службы.

Альтернатива состоит в том, чтобы выбросить ее как byte[] и кодировать вручнуючерез

byte[] bytes=Encoding.UTF8.GetBytes(yourString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...