操纵Unicode和ASCII字符集在C#
我在我的C#应用程序操纵Unicode和ASCII字符集在C#
string [,] unicode2Ascii = { { "ஹ", "\x86" } };
&#3001这种映射 - 是泰米尔文字 “ஹ” 的Unicode值。这是MS Word作为字节序列保存的unicode值的原始十六进制文字。我试图将这些unicode值“字符串”映射到255以下的十六进制值(以适应非Unicode支持的系统)。
我试图用与string.replace这样的:
S = S.replace(unicode2Ascii[0,0], unicode2Ascii[0,1]);
然而得到的输出中有一个?而不是存储的实际十六进制0x86。任何关于如何将该数组的第二个元素的编码设置为像windows-1252的指针?
或者是否有更好的方法来做这种转换?
在此先感谢
不知道这是否有帮助,但泰米尔语代码页“57004 - ISCII泰米尔语”是由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);
.NET中的字符串始终是Unicode内部。然而这并不重要。字符串是一系列字符,.NET字符串支持所有的Unicode字符。你不应该在乎他们如何在记忆中呈现。只有当你的字符串离开(或进入).NET时(即,当你将它们写入(读取)到文件,通过套接字发送(接收)到其他系统等),你才会关心编码。这是当你使用Encoding类转换为你想要的任何编码时。替换字符或在.NET字符串上尝试任何编码技巧都毫无意义。 也我推荐这篇文章http://www.joelonsoftware.com/articles/Unicode.html
意图不是检索unicode字符的ascii代码。相反,只需将其替换为映射表中定义的“some”ascii代码字符即可。基本上我想看看如何在.NET中将0x86表示为一个字符串,以便我可以使用string.replace方法替换&#3001文字 – Murlex 2011-01-05 13:42:49
@Murlex我很困惑,因为您期待什么结果将泰米尔语文本的unicode文件转换为代码页1252中的ANSI文件(如问题中所述)。谁是目标受众? – 2011-01-05 13:58:35
在UNICODE规范出台之前,我们有一个名为TSCII的泰米尔代码页标准(www.tscii.org)。仍然有一些系统不支持显示泰米尔unicode字符所需的新形状引擎。因此,我们有时需要将unicode文本“降级”为1字节的TSCII标准。 – Murlex 2011-01-05 16:07:53