2015-10-23 26 views
1

我試圖將一些字符串從UTF 16 LE轉換爲UTF 16 BE,但它無法編碼第二個中文字符。.NET C#從UTF 16 LE轉換爲UTF 16 BE失敗

樣品字符串:測試馨俞

代碼:

byte[] bytes = Encoding.Unicode.GetBytes(sendMsg.Text); 
sendMsg.Text = Encoding.BigEndianUnicode.GetString(bytes) 

我也試過

var encode = new UnicodeEncoding(false, true, true); 
var messageAsBytes = encode.GetBytes(sendMsg.Text); 
var enc = new UnicodeEncoding(true, true, true); 
sendMsg.Text = enc.GetString(messageAsBytes); 

這將導致以下錯誤:無法轉換字節[DE] [ 4F]在索引184從指定的代碼頁到Unicode的行:

sendMsg.Text = enc.GetString(messageAsBytes); 

謝謝。

+2

該代碼沒有任何意義,字符串總是用C#程序中的utf-16le編碼。無論如何,無論如何嘗試都會讓你的程序在代理上失敗。像U + DE4F一樣。你必須保存在一個字節[]中。或者解釋你真正想要解決的問題。 –

+0

我試圖將字符串轉換爲UTF 16 BE。 Windows/C#上的默認字符串是UTF 16 LE。原因是我想將此消息發送給IBM大型機。 –

+1

你不能使用'sendMsg.Text'。可能有什麼替代方案是完全不清楚的,當然也有一個,但是你不給我們一槍找到它。打電話給IBM支持,以獲得產品幫助,非零機會,因爲每個人都有這個問題,所以只需要進行配置設置。 –

回答

0

我通過設置此屬性沒有任何轉換得到了它的工作。

sendMsg.SetIntProperty(XMSC.JMS_IBM_CHARACTER_SET, 1201); 
1

編碼字符串的結果是一個字節數組,而不是另一個字符串。

只需使用

byte[] bytes = Encoding.BigEndianUnicode.GetBytes(sendMsg.Text); 

到串編碼爲使用UTF-16是編碼字節。

然後將這些字節發送到大型機。

如何將這些字節發送到大型機可能是另一個問題的主題,但它聽起來像你需要將這些編碼字節呈現在字符串類型的變量中。這聽起來像是你正在使用的庫中的一個錯誤。我們需要了解該庫的性質及其可能的錯誤以找到解決方法。一種選擇,你可以嘗試,但它在黑暗中拍攝,是這樣的:

string toSend = Encoding.Default.GetString(bytes); 

這將產生一個字符串,其中每個字符是從編碼字符串一個字節表示,在UTF 16秩序。它的長度將是原始字符串長度的兩倍。

+0

我確實嘗試過,但sendMsg的.Text屬性是一個字符串。當我將它轉換爲字符串時,結果會如此處理,大型機會嘗試對十六進制字符串進行十六進制化。 Ta –

+0

我不確定我是否理解您的評論,但這是您需要將字符串轉換爲Big Endian Unicode的內容。聽起來像你問題是關於如何將編碼的字符串(這是一個字節數組)發送到大型機? –

+0

對不起。在那裏打字。我的意思是我曾嘗試過。當我向他們發送十六進制字符串時,他們自然會將其看作一個字符串。屬性.Text不支持字節[]恐怕。 –

1

我想你應該用BigEndianUnicode類來處理你的輸入字符串。

我從你提供的這個代碼。它工作正常,沒有錯誤:

String input = "馨俞"; 
    var messageAsBytes = Encoding.BigEndianUnicode.GetBytes(input); 
    input = Encoding.BigEndianUnicode.GetString(messageAsBytes); 

如果我處理「輸入」與Encoding.Unicode,並打印出兩個字節數組(具有Unicode和一個與大端處理),它顯示的差異:

enter image description here

所以,輸入被轉換成你需要的尾數。

+0

謝謝你的回覆。星期一,當大型機傢伙回來時,我會給它一個旋轉。 –

+0

我通過設置這個屬性來工作。助教。 sendMsg.SetIntProperty(XMSC.JMS_IBM_CHARACTER_SET,1201); –

+0

很高興聽到你做到了! – fabrosell