c#从控制台读取希伯来语文本

时间:2018-08-02 12:21:47

标签: c# character-encoding hebrew

我正在使用Windows 10(也许是问题所在:-))

我有一个简单的代码,可以从控制台读取希伯来语中的文本,并打印为十六进制\ DEC值

但是他一直都给我00 在控制台窗口上,我可以看到希伯来字母

为什么?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Net;
using System.Net.Sockets;
using System.Timers;
using System.IO;

namespace HebTest
{
    class Program
    {
        static public void Main(string[] args)
        {

            Console.WriteLine("Write your message here  - ");

            string StringMessage = Console.ReadLine();


            Console.WriteLine("print string  - " + StringMessage);
            ///message in HEX
            byte [] ByteMessage = Encoding.Default.GetBytes(StringMessage);
            string HexMessage = BitConverter.ToString(ByteMessage); 

            Console.WriteLine("MSG in HEX -  " + HexMessage);
            Console.Write( 
                          Encoding.Default.GetString(ByteMessage)                   
                          );

            Console.WriteLine();
            foreach (byte p in ByteMessage)
            {
                Console.Write((char)p + "  -  " +  p );
                Console.WriteLine("");


            }

}

例如,我输入此文本 “测试אבגד” 这就是我得到的:

Write your message here  -
test אבגד                         ---> this I wrote on the console
print string  - test
MSG in HEX -  74-65-73-74-20-00-00-00-00
test     
t  -  116
e  -  101
s  -  115
t  -  116
   -  32
   -  0
   -  0
   -  0
   -  0

我想念什么?

谢谢,

2 个答案:

答案 0 :(得分:2)

您正在使用Encoding.Default将字符串转换为二进制。这几乎总是一个坏主意-这意味着相同的代码可能在某些机器上可以工作而在其他机器上却不能。当您要在该计算机上读取/写入文本文件时,很有用,并且确保系统默认编码是正确的选择任何运行它的机器。真是罕见。

尤其是,您正在尝试与外部设备通话-这意味着您需要使用 期望的编码。您应该找出答案,并使用适当的编码。例如,如果设备需要UTF-8,请使用:

// Local variable names changed to be more idiomatic C#
string text = Console.ReadLine();
byte[] bytes = Encoding.UTF8.GetBytes(text);

正如您现在所指示的,该设备期望使用Windows-1255,即代码页1255,因此您将获得如下所示的编码:

Encoding.GetEncoding(1255)

为澄清起见,我可能会为此使用一个单独的变量:

string text = Console.ReadLine();
Encoding encoding = Encoding.GetEncoding(1255);
byte[] bytes = encoding.GetBytes(text);

答案 1 :(得分:-1)

发现了问题(在@Daisy Shipton让我思考之后)

代码还可以 需要去  控制面板-区域-管理-系统区域设置-

Beta版的REMOVE V:使用Unicode UTF-8获得全球语言支持

希望有一天能对某人有所帮助