Как кодировать японские символы - PullRequest
4 голосов
/ 28 июня 2011

Я должен разработать программу.Это система кодирования.

У меня есть следующие японские иероглифы:

れ れ づ れ な る ゝ に 、 日暮 ら 硯 に にЯ хочу преобразовать эту строку в следующую кодировку:

% 26% 2312388% 3B% 26% 2312428% 3B% 26% 2312389% 3B% 26% 2312428% 3B% 26% 2312394% 3B% 26% 2312427% 3B% 26% 2312414% 3B% 26% 2312445% 3B% 26% 2312395% 3B% 26% 2312289% 3B% 26% 2326085% 3B% 26% 2326286% 3B% 26% 2312425% 3B% 26% 2312375% 3B% 26% 2312289% 3B% 26% 2330831% 3B% 26% 2312395% 3B% 26% 2312416% 3B% 26% 2312363% 3B% 26% 2312402% 3B% 26% 2312390% 3B% 26% 2312289% 3B% 26% 2324515% 3B% 26% 2312395% 3B% 26% 2312358% 3B% 26% 2312388% 3B% 26% 2312426% 3B% 26% 2312422% 3B% 26% 2312367% 3B% 26% 2312424% 3B% 26% 2312375% 3B% 26% 2312394% 3B% 26% 2312375% 3B% 26% 2320107% 3B% 26% 2312434% 3B% 26% 2312289% 3B% 26% 2312381% 3B% 26% 2312371% 3B% 26% 2312399% 3B% 26% 2312363% 3B% 26% 2312392% 3B% 26% 2312394% 3B% 26% 2312367% 3B% 26% 2326360% 3B% 26% 2312365% 3B% 26% 2312388%3B% 26% 2312367% 3B% 26% 2312428% 3B% 26% 2312400% 3B% 26% 2312289% 3B% 26% 2312354% 3B% 26% 2312420% 3B% 26% 2312375% 3B% 26% 2312358% 3B%26% 2312371% 3B% 26% 2312381% 3B% 26% 2312418% 3B% 26% 2312398% 3B% 26% 2312368% 3B% 26% 2312427% 3B% 26% 2312411% 3B% 26% 2312375% 3B% 26%2312369% 3B% 26% 2312428% 3B% 26% 2312290% 3B.

Как я могу это сделать?

Ответы [ 3 ]

8 голосов
/ 28 июня 2011

Я полагаю, что вы ищете HttpUtility.UrlEncode, не можете определить кодировку, чтобы получить точно такой же вывод, который вы показываете.

var testString = "つれづれなるまゝに、日暮らし、硯にむかひて、心にうつりゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。";
var encodedUrl = HttpUtility.UrlEncode(testString, Encoding.UTF8);

Возможно, вы захотите изменить свой вопрос, поскольку вы неНе нужно конвертировать Unicode в ASCII, что невозможно.Вам скорее нужно Persent кодировать или URL кодировать Процент-кодирование .

[EDIT]

Я понял это:

var testString = "つれづれなるまゝに、日暮らし、硯にむかひて、心にうつりゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。";
var htmlEncoded = string.Concat(testString.Select(arg => string.Format("&#{0};", (int)arg)));
var result = HttpUtility.UrlEncode(htmlEncoded);

Результат будет точно соответствовать кодировке, которую вы указали.Шаг за шагом:

var inputChar = 'つ';
var charValue = (int)inputChar; // 12388
var htmlEncoded = "&#" + charValue + ";"; // つ
var ulrEncoded = HttpUtility.UrlEncode(htmlEncoded); // %26%2312388%3b
3 голосов
/ 28 июня 2011

Это невозможно.Unicode намного больше, чем ASCII, и вы не можете найти все символы Unicode в ASCII.в то время как ASCII - только 256 символов (с контрольными символами), Unicode - десятки тысяч (я полагаю).

1 голос
/ 28 июня 2011

Вот функция, которая работает:

public static string UrlDoubleEncode(string text)
{
    if (text == null)
        return null;

    StringBuilder sb = new StringBuilder();
    foreach (int i in text)
    {
        sb.Append('&');
        sb.Append('#');
        sb.Append(i);
        sb.Append(';');
    }
    return HttpUtility.UrlEncode(sb.ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...