2011-01-05 73 views
1

我在我的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的指针?

或者是否有更好的方法来做这种转换?

在此先感谢

回答

3

不知道这是否有帮助,但泰米尔语代码页“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); 
+0

意图不是检索unicode字符的ascii代码。相反,只需将其替换为映射表中定义的“some”ascii代码字符即可。基本上我想看看如何在.NET中将0x86表示为一个字符串,以便我可以使用string.replace方法替换&#3001文字 – Murlex 2011-01-05 13:42:49

+0

@Murlex我很困惑,因为您期待什么结果将泰米尔语文本的unicode文件转换为代码页1252中的ANSI文件(如问题中所述)。谁是目标受众? – 2011-01-05 13:58:35

+0

在UNICODE规范出台之前,我们有一个名为TSCII的泰米尔代码页标准(www.tscii.org)。仍然有一些系统不支持显示泰米尔unicode字符所需的新形状引擎。因此,我们有时需要将unicode文本“降级”为1字节的TSCII标准。 – Murlex 2011-01-05 16:07:53

3

.NET中的字符串始终是Unicode内部。然而这并不重要。字符串是一系列字符,.NET字符串支持所有的Unicode字符。你不应该在乎他们如何在记忆中呈现。只有当你的字符串离开(或进入).NET时(即,当你将它们写入(读取)到文件,通过套接字发送(接收)到其他系统等),你才会关心编码。这是当你使用Encoding类转换为你想要的任何编码时。替换字符或在.NET字符串上尝试任何编码技巧都毫无意义。 也我推荐这篇文章http://www.joelonsoftware.com/articles/Unicode.html

+0

是的练习的目的是修改文件的内容。感谢您的链接。将读取以及.. – Murlex 2011-01-05 13:40:41

+0

然后,您修改该字符串,并且当您使用特定的编码将文本字符串写入文件。在.NET代码中,您不需要使用任何unicode代码点数字。您可以直接在.NET源代码中使用该符号。 – Stilgar 2011-01-05 17:05:37

+0

再次感谢您的链接。我对从文件读取和写入文件时如何使用编码有一些基本的了解。 – Murlex 2011-01-06 00:07:13