将波斯语Unicode转换为Ascii

6

我需要获取波斯语字符串的ASCII码以在程序中使用。但是下面的方法会出现问号标记:"??? ????"

public string PerisanAscii()
    {

        //persian string 
        string unicodeString = "صبح بخیر";

        // Create two different encodings.
        Encoding ascii = Encoding.ASCII;
        Encoding unicode = Encoding.Unicode;

        // Convert the string into a byte array. 
        byte[] unicodeBytes = unicode.GetBytes(unicodeString);

        // Perform the conversion from one encoding to the other. 
        byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

        // Convert the new byte[] into a char[] and then into a string. 
        char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
        ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
        string asciiString = new string(asciiChars);

        return asciiString;
    }

你能帮我吗?

最好的问候,
Mohsen


3
由于ASCII不支持波斯语,所以这并不是真正可能的。您想用ASCII字符串做什么? - acfrancis
1
我需要在AutoCAD中使用这个方法。 - Mohsen
1
在VBA中,当我得到一个波斯文本时,在代码编辑器中我会看到?标记。 - Mohsen
好的,你不能使用ASCII编码。我不确定这一点,但是AutoCAD可能支持Unicode编码。如果不支持,你可以尝试另一种支持波斯语的编码方式。 - acfrancis
可能是重复的问题:ASCIIEncoding.ASCII.GetBytes()返回意外值 - CodeCaster
2个回答

5
你可以将波斯语UTF8数据转换为Windows-1256(阿拉伯Windows):
var enc1256 = Encoding.GetEncoding("windows-1256");
var data = enc1256.GetBytes(unicodeString);
System.IO.File.WriteAllBytes(path, data);

1
ASCII不支持波斯语。您可能需要使用旧的伊朗系统编码标准。这取决于您的Autocad应用程序。我不知道是否有直接的Windows编码可供使用。但是,您也可以手动转换字符。这是一个简单的映射。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接