[英]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.