Управление как Unicode, так и набором символов ASCII в C # - PullRequest
1 голос
/ 05 января 2011

У меня есть это отображение в моем приложении C #

string [,] unicode2Ascii = { { "ஹ", "\x86" } };

ஹ - это значение Unicode для тамильского литерала "ஹ".Это необработанный шестнадцатеричный литерал для значения Unicode, сохраняемого MS Word как последовательность байтов.Я пытаюсь отобразить эти «строки» значений Юникода в шестнадцатеричное значение ниже 255 (чтобы приспособить системы, не поддерживающие Юникод).

Я пытаюсь использовать string.replace следующим образом:

S = S.replace(unicode2Ascii[0,0], unicode2Ascii[0,1]);

Тем не менее, результирующий вывод имеет?вместо фактического шестнадцатеричного 0x86 сохраняется.Любой указатель на то, как я мог бы установить кодировку для второго элемента этого массива в нечто вроде windows-1252?

Или есть ли лучший способ сделать это преобразование?1015 *

Ответы [ 2 ]

4 голосов
/ 05 января 2011

Не уверен, поможет ли это, но кодовая страница тамильского языка "57004 - ISCII Tamil" поддерживается Windows.

Хотя это не дает тот же перевод для приведенного выше примера символа.Для «ஹ» это дает 216. Возможно, нужно использовать другую кодовую страницу?

        string tamilUnicodeString = "ஹ";

        Encoding encoding = Encoding.GetEncoding("x-iscii-ta");

        byte[] codepageBytes = encoding.GetBytes(tamilUnicodeString);

Обновление

Если вы хотите взять файл Unicode в качестве вводатранслитерируйте символы, чтобы получить однобайтовое представление, следующее должно сделать свое дело.Полученный массив должен иметь ваше однобайтовое представление, если ваш словарь кодирует каждый символ:

        Dictionary<char, char> lookup = new Dictionary<char, char>
        {
            { 'ஹ', '\x86' },
            { 'இ',  '\x87' },
            //next pair...,
            //etc, etc.
        };

        string input = "ஹஇதில் உள்ள தமிழ் எழுத்துக்கள் சரியாகத் தெரிந்தால்";

        char[] chars = input.ToCharArray();

        for (int i = 0; i < chars.Length; i++)
        {
            char replaceChar;

            if (lookup.TryGetValue(chars[i], out replaceChar))
            {
                chars[i] = replaceChar;
            }
        }

        byte[] output = Encoding.GetEncoding("iso-8859-1").GetBytes(chars);
3 голосов
/ 05 января 2011

Строки в .NET всегда являются внутренними Unicode. Однако это не имеет большого значения. Строки представляют собой последовательность символов, а строки .NET поддерживают все символы Юникода. Вас не должно волновать, как они представлены в памяти. Вы заботитесь о кодировании только тогда, когда ваши строки покидают (или вводят) .NET (т.е. когда вы записываете (читаете) их в файлы, отправляете (получаете) их через сокеты в другие системы и т. Д.). Это когда вы используете класс Encoding для преобразования в любую кодировку по вашему желанию. Замена символов или использование каких-либо приемов кодирования в строках .NET бессмысленно. Также я рекомендую эту статью http://www.joelonsoftware.com/articles/Unicode.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...