将阿拉伯文字编码为十六进制格式

时间:2018-08-16 18:23:20

标签: c# arabic pos

我正在尝试将阿拉伯文本编码为十六进制,以便将其发送到POS打印机。

 byte[] bytes1 = Encoding.UTF8.GetBytes("عمر");
    Array.Reverse(bytes1);
    var hexString = BitConverter.ToString(bytes1);
    hexString = hexString.Replace("-", "");


    MyPrinter.PrintAr(hexString);

但是我仍然得到打印机可以理解的错误的十六进制格式。我需要的格式应如下所示:

\uFEA3

我还尝试了以下代码:

byte[] bytes1 = Encoding.Unicode.GetBytes("عمر");
         Array.Reverse(bytes1);
        int counter = 0;
        var value=""     ;
        string var2 = "";
        foreach (byte letter in bytes1)
        {
            // Get the integral value of the character.


            // Convert the decimal value to a hexadecimal value in string form.
            if (counter == 0)
            {

                counter = 1;
                  value =  letter.ToString() ;
            }
            else
            {
                value += letter.ToString();
                var2 = Convert.ToUInt16(value).ToString();
                insert = "\\u" + var2;
                counter = 0;
            }

            hexOutput += insert;


        } 

但仍会以数字格式显示十六进制:

\u0669

请帮助您为我的打印机获取正确的十六进制格式。

1 个答案:

答案 0 :(得分:0)

您可以使用它。它将Unicode文本编码为字符串组。每个字符都被编译为4位十六进制数字:

string textInput = "عمر"
StringBuilder stringBuilder = new StringBuilder();
foreach (char character in textInput)
{
    stringBuilder.Append(Convert.ToString(character, 16).PadLeft(4,'0'));
}
string hex = stringBuilder.ToString();

我希望这是您需要的:)