繁体   English   中英

在C#中同时处理unicode和ASCII字符集

[英]Manipulating both unicode and ASCII character set in C#

我的C#应用​​程序中有此映射

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

ஹ-是泰米尔文字“ஹ”的unicode值。 这是MS Word保存为字节序列的unicode值的原始十六进制文字。 我正在尝试将这些unicode值“字符串”映射到255以下的十六进制值(以便容纳不受unicode支持的系统)。

我试图像这样使用string.replace:

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

但是,结果输出具有? 而不是存储的实际十六进制0x86。 关于如何将该数组的第二个元素的编码设置为类似于Windows-1252的任何指针?

还是有更好的方法进行此转换?

提前致谢

不确定是否有帮助,但是Windows支持泰米尔语代码页“ 57004-ISCII Tamil”。

但是,上面的示例字符并没有提供相同的翻译。 对于“ஹ”,它给出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);

.NET中的字符串内部始终是Unicode。 但是,这并不重要。 字符串是一系列字符,.NET字符串支持所有unicode字符。 您不必关心它们在内存中的呈现方式。 仅在字符串离开(或进入).NET时(例如,当您将字符串写入(读取)到文件中,通过套接字将其发送(接收)到其他系统等时),您才关心编码。 这是当您使用Encoding类转换为所需的任何编码时。 在.NET字符串上替换字符或尝试任何编码技巧都是没有意义的。 我也推荐这篇文章http://www.joelonsoftware.com/articles/Unicode.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM