我在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的任何指针?
或者有更好的方法进行此转换吗?
提前致谢
答案 0 :(得分:4)
不确定这是否有帮助,但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);
答案 1 :(得分:3)
.NET中的字符串在内部始终是Unicode。然而,这并不重要。字符串是一系列字符,.NET字符串支持所有unicode字符。你不应该关心它们是如何呈现在记忆中的。只有当你的字符串离开(或输入).NET时(即当你将它们写入(读取)文件,通过套接字发送(接收)到其他系统等)时,你才关心编码。这是当您使用Encoding类转换为您想要的任何编码时。替换字符或尝试.NET字符串上的任何编码技巧是没有意义的。 我还推荐这篇文章http://www.joelonsoftware.com/articles/Unicode.html