PHP и C # различные выходные данные Unicode - PullRequest
0 голосов
/ 09 октября 2018

Привет, у меня есть многоязычная строка: "хинди - हिंदी, китайский - 痴 呢 色 , русский - русский"

Мне нужно выполнить код URLEncode после его конвертации в UTF8 на PHP и C #.

<?php
$sms_text = 'Hindi - हिंदी , Chinese - 痴呢色 ,Russian - руссиан';
$encoded_text = utf8_encode($sms_text);
$message = urlencode($encoded_text);

echo $message;

Выход: (правильный)

Хинди ++ - +% C3% A0% C2% A4% C2% B9% C3% A0% C2% A4% C2% BF% C3% A0% C2% A4% C2% 82% C3% A0% C2% A4% C2% A6% C3% A0% C2% A5% C2% 80 +% 2C + Китайская + - ++% C3% A7% C2% 97% C2% B4% C3% A5% C2% 91% C2% A2% C3% A8% C2% 89% C2% B2 +% C3% AF% C2% до н.э.% C2% 8CRussian + - +% C3% 91% C2% 80% C3% 91% C2% 83% C3% 91% C2% 81% C3% 91% C2% 81% C3% 90% C2% B8% C3% 90% C2% B0% C3% 90% C2% BD

Но когда я использую c #:

string msg = "Hindi - हिंदी , Chinese - 痴呢色 ,Russian - руссиан";
var a = Encoding.UTF8.GetBytes(msg);
msg = HttpUtility.UrlEncode(a);
Console.WriteLine(msg);

Это дает мне следующий вывод (неверно)

Хинди + - +% E0% а4% b9% E0% а4% BF% E0% а4% 82% E0% а4% а6% E0% а5% 80 +% 2c + Китайская + - +% E7% 97% b4%E5% 91% а2% E8% 89% b2 +% эф% BC% 8cRussian + - +% d1% 80% d1% 83% d1% 81% d1% 81% d0% b8% d0% b0% d0% шд

Может кто-нибудь помочь мне исправить мой код C #.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Итак, здесь есть несколько проблем -

Ваш php не дает правильного результата - $encoded_text = utf8_encode($sms_text); эта часть вызывает некоторые искажения и не нужна.

Помимо этого в коде C #, который вы вызываете msg = HttpUtility.UrlEncode(a);, это заставляет вас кодировать URL-адрес типа a, а не строку.Опять же, все, что вам нужно сделать, это

UTF8Encoding utf8 = new UTF8Encoding(); string utf8Encoded = HttpUtility.UrlEncode(msg,utf8);

что-то в этом роде, если вы отключите кодирование mangling из вашего PHP и сделаете только прямое кодирование utf8 url для строки .. онив итоге получается одинаково как в C #, так и в PHP

0 голосов
/ 09 октября 2018

У вас есть ошибка в php-коде.Просто напишите это:

$sms_text = 'Hindi - हिंदी , Chinese - 痴呢色 ,Russian - руссиан';
$message = rawurlencode($sms_text);

и это в C # проекте

string msg = "Hindi - हिंदी , Chinese - 痴呢色 ,Russian - руссиан";    
HttpUtility.UrlEncode(msg, Encoding.UTF8);
...