2010-09-06 33 views
5

Tôi phải tạo một số loại tệp văn bản trong đó có số và chữ cái Hebrew được giải mã thành ASCII.Làm thế nào để chuyển đổi hebrew (unicode) thành Ascii trong C#?

Đây là tập tin phương pháp sáng tạo mà gây nên trên ButtonClick

protected void ToFile(object sender, EventArgs e) 
{ 
    filename = Transactions.generateDateYMDHMS(); 
    string path = string.Format("{0}{1}.001", Server.MapPath("~/transactions/"), filename); 
    StreamWriter sw = new StreamWriter(path, false, Encoding.ASCII); 
    sw.WriteLine("hello"); 
    sw.WriteLine(Transactions.convertUTF8ASCII("שלום")); 
    sw.WriteLine("bye"); 
    sw.Close(); 
} 

như bạn có thể nhìn thấy, tôi sử dụng Transactions.convertUTF8ASCII() phương pháp tĩnh để chuyển đổi từ chuỗi lẽ Unicode từ NET để đại diện ASCII của nó. Tôi sử dụng nó trên thuật ngữ 'shalom' của Hebrew và quay lại '????' thay vì kết quả tôi cần.

Đây là phương pháp.

public static string convertUTF8ASCII(string initialString) 
{ 
    byte[] unicodeBytes = Encoding.Unicode.GetBytes(initialString); 
    byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes); 
    return Encoding.ASCII.GetString(asciiBytes); 
} 

Thay vì từ ban đầu được giải mã thành ASCII, tôi nhận được '????' trong tập tin tôi tạo ngay cả khi tôi chạy debbuger tôi nhận được kết quả tương tự.

Tôi đang làm gì sai?

+0

Hi, Vậy bạn đã giải quyết nó như thế nào? Tôi có cùng một vấn đề. Cần phải chuyển đổi unicode Hebrew (1400, 1500 vv) thành mã ASCII. –

Trả lời

2

Bạn không thể đơn giản dịch các ký tự unicode tùy ý thành ASCII. Điều tốt nhất có thể làm là loại bỏ các ký tự không được hỗ trợ, do đó, ????. Rõ ràng là các ký tự 7 bit cơ bản sẽ hoạt động, nhưng không nhiều. Tôi tò mò về kết quả mong đợi là gì?

Nếu bạn cần điều này cho chuyển (thay vì đại diện), bạn có thể xem xét mã hóa base-64 của byte UTF8 cơ bản.

+0

Cảm ơn, Marc. Tôi có 'Œ € ‹‰' loại ký tự này trong tệp ví dụ, mặc dù nó không đại diện cho 'shalom' nhưng bạn sẽ nhận được một ý tưởng về loại Mã hóa của nó. Tôi không thể hiểu ý của bạn bằng cách 'chuyển' sang base-64. – eugeneK

+0

@eugeneK - nó vẫn không rõ ràng đối với tôi bản dịch đó là gì. Tôi nghi ngờ tôi sẽ cần phải xem trình tự byte chính xác và mã số nhân vật được cho là bản đồ với nhau để nó "bấm". –

+0

Tôi đã có yêu cầu với sai lầm dẫn tôi đến ASCII ở vị trí đầu tiên. Cảm ơn các thông tin anyways. – eugeneK

2

Bạn có lẽ có nghĩa là ANSI chứ không phải ASCII?

ASCII không xác định bất kỳ ký tự tiếng Do Thái nào. Tuy nhiên có một số mã trang ANSI mà làm như "cửa sổ-1255"

Trong trường hợp đó, bạn có thể muốn xem xét việc tìm kiếm tại địa chỉ: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

Nói tóm lại, nơi bạn có:

Encoding.ASCII 

bạn sẽ thay thế nó bằng:

Encoding.GetEncoding(1255) 
+0

bạn có thể đúng. Tôi không có kinh nghiệm với mã hóa ở tất cả vì vậy tôi không bao giờ biết ASCII không chứa các ký tự tiếng do thái – eugeneK

+0

@eugueK ASCII là khá nhiều chỉ là bảng chữ cái tiếng Anh, 0-9, dấu chấm câu cơ bản và một số ký tự điều khiển. Ref: http://en.wikipedia.org/wiki/ASCII – userx

+0

nopes, tôi đã có yêu cầu với sai lầm dẫn tôi đến ASCII ở vị trí đầu tiên. Cảm ơn các thông tin anyways. – eugeneK

1

bạn có lẽ hỏi về transliteration (như trong "Romanization") i nstead của chuyển đổi mã hóa, nếu bạn thực sự đang nói về ASCII?

+0

nopes, tôi đã có yêu cầu với sai lầm mà dẫn tôi đến ASCII ở vị trí đầu tiên. Cảm ơn các thông tin anyways. – eugeneK

1

Tôi vừa gặp phải vấn đề tương tự khi tệp xml gốc được mã hóa ASCII.

Như Userx gợi ý

Encoding.GetEncoding (1255)

XDocument.Parse(System.IO.File.ReadAllText(xmlPath, Encoding.GetEncoding(1255))); 

Bây giờ tập tin XDocument tôi có thể đọc hebrew ngay cả khi file xml được lưu lại dưới dạng ASCII

Các vấn đề liên quan