UTF8Encode()

1 отговора 0 прегледа
#1

UTF8Encode()

Здравейте,

рових се в .net tutorials - пробвах няколко варианта и въпреки това явно не правя нещо като хората или просто има разлика в реализацията:

в C# имам един стринг - смесица от латински букви и unicode символи. ето кодовете на символите от стринга:
222,207,215,220,162,1106,1139,1141,1128,1187

на delphi имам function UTF8Encode(ws: WideString): UTF8String, която ми връща следното кодиране:
222,207,215,220,162,3,210,8,183,67,38,56,25,52,23
т.е. ако правилно се ориентирам само unicode символите се кодират с 2 байта, а останалите си остават с 1.

въпроса ми е:
Има ли в C# стандартна функция, която да дава същия резултат ?
пробвах всички възможни Encoding.(тук пробвах всички възможни).getBytes() , но не се получава засега.
сигурно изпускам нещо

Отговор
в отговор на longy #2

P.S: може би го извадих от контекста

за да не се окаже, че проблема всъщност не е точно в това, което аз си мисля - ето за какво точно иде реч - исках възможно най-кратко да е въпросчето, ама сега като се замислих може би като е вън от контекста е по-кофти отколкото да е дълго:
====================
string-a, за който говоря се опитвам се да го изпратя към един вебсървър в UTF8.
в delphi без проблем го направих така:
.........


utf8Req := UTF8Encode(wsInput);
// подготовка на данните за изпращане през indy компонента (очаква TStrings):
req := TStringList.Create;
req.Add(utf8Req);
IdHTTP.Request.Method := hmPost;
result := IdHTTP.Post(serverURL, req);


...........
от другата страна (на сървъра) получават следните кодове:
222,207,215,220,162,3,210,8,183,67,38,56,25,52,23
т.е. май само unicode символите се кодират с 2 байта, а останалите са си пак в 1 байт.
и всичко е както го очакват на сървъра.

на C# опитвам така:
....................


// подготовка на данните за POST request-a // очаква byte[]
byte[] byteArray = (.............................)
WebRequest httpReq = (WebRequest)WebRequest.Create(serverURL);
httpReq.Proxy = WebProxy.GetDefaultProxy();
httpReq.Method = "POST";
httpReq.ContentType = "application/x-www-form-urlencoded";
httpReq.ContentLength = byteArray.Length;
Stream dataStream = httpReq.GetRequestStream();
dataStream.Write(byteArray. 0. byteArray.Length);
dataStream.Close();


....................
тоя byteArray как ли не се опитах да го получа от стринга - не мога да получа същия ефект (unicode символите с 2, a другите с 1 байт)

има ли стандартен начин да го направя или да си пиша функция ?

Отговор