2016-07-25 131 views
0

需要將SOH值'\ u0001'的unicode轉換爲Ascii。爲什麼這不起作用?Javascript unicode to ASCII

var soh = String.fromCharCode(01);
它返回 '\ U0001'
或當我嘗試

var soh = '\u0001' 它返回一個笑臉。
我怎樣才能獲得的unicode成爲適當的SOH值(空白不可打印字符)

回答

1

JS沒有ASCII字符串,它們本質上是UTF-16。

在瀏覽器中,你運氣不好。如果你正在編寫node.js,那麼你很幸運!

您可以使用緩衝區將字符串轉碼爲八位字節,然後隨意操作二進制數據。但是一旦你搞砸了,你不一定會從緩衝區中取回一個有效的字符串。

無論哪種方式,你必須在這裏閱讀更多關於它:

https://mathiasbynens.be/notes/javascript-encoding

或在這裏:

https://nodejs.org/api/buffer.html


編輯:在你說的評論你使用node.js,所以這是上面第二個鏈接的摘錄。

const buf5 = Buffer.from('test'); 
// Creates a Buffer containing ASCII bytes [74, 65, 73, 74]. 

要創建嵌入在一個共同的ASCII字符串的字符SOH使用常見的轉義序列\x01像這樣:

const bufferWithSOH = Buffer.from("string with \x01 SOH", "ascii"); 

這應該這樣做。然後,您可以將bufferWithSOH內容發送到輸出流,如網絡,控制檯或文件流。

Node.js文檔將指導您如何在Buffer中使用字符串,只需查看上面的第二個鏈接即可。

+0

FWIW您可以使用[iconv-lite](https://github.com/ashtuchkin/iconv-lite)在瀏覽器的編碼(以及節點)之間進行轉換。 – mscdex

+0

很高興知道!謝謝。 – pid

+0

我正在做節點,但我從來沒有做過任何與ASCII字符。看起來不可能讓SOH ascii角色正確顯示。 –

0

爲ASCII將是一個字節數組:0x00 0x01您需要的\u和呼叫後提取Unicode代碼點parseInt,然後從Number中提取字節。 JavaScript可能不是這方面最好的語言。

+0

謝謝,我有點用Javascript和堅持使其工作。有沒有這樣的例子?我從來沒有真正處理過ASCII字符和任何幫助,不勝感激。 –

+0

你想做什麼? –

+0

我有一個連接到C++服務器的應用程序(在nodejs中),問題是當我將消息發送到服務器時,而不是正確的「SOH」ascii字符時,它顯示笑臉或unicode ('\ 0001'),這是不可接受的分隔符。我需要它是空白空間或任何它應該是的字符,並且對於C++應用程序是可讀的,謝謝! –