2012-07-17 156 views
2

我正在嘗試讀取包含擴展ascii字符(如'á'或'è')的文件,但NodeJS似乎無法識別它們。NodeJS擴展ASCII支持

我試着讀成:

  • 緩衝
  • 字符串

試圖differente編碼類型:

  • ASCII
  • 的base64
  • UTF8

http://nodejs.org/api/fs.html

如引用是有辦法,使這項工作?

+0

這幾乎肯定是您使用節點的fs模塊的方式的問題。將文件讀取爲UTF-8(這是節點的默認值)應該可以讀取擴展ASCII。請發佈代碼示例,我們可以幫助您進行調試。 – 2012-07-17 18:48:35

+0

我剛剛發現nodepad ++能夠將從哪種格式轉換爲UTF-8格式。該文件在ANSI中,當我試圖在utf-8中讀取它時,它不會識別擴展的ascii字符。我只是先轉換它,然後才能正確讀取它! – 2012-07-17 19:19:22

+0

對不起,沒有發佈任何代碼,但因爲我覺得它似乎沒有必要。謝謝Peter – 2012-07-17 19:22:35

回答

3

我使用二進制類型來讀取這樣的文件。例如

var fs = require('fs'); 

// this comment has I'm trying to read a file that contains extended ascii characters like 'á' or 'è', 

fs.readFile("foo.js", "binary", function zz2(err, file) { 
    console.log(file); 
}); 

當我保存到上述foo.js,則以下顯示在輸出:

var fs = require('fs'); 

// this comment has I'm trying to read a file that contains extended ascii characters like '⟡ 漀爀 ✀', 

fs.readFile("foo.js", "binary", function zz2(err, file) { 
    console.log(file); 
}); 

上述wierdness是因爲我在emacs的緩衝器運行它。

+0

嗯,我不確定我能夠對二進制數據執行字符串操作。我不知道是否有辦法將它轉換爲String,但我已經找到了答案。 – 2012-07-17 19:23:34

+0

zz2中的'file'變量是字符串的一個實例。 – seth 2012-07-17 20:00:09

+1

「二進制」編碼已棄用,應該使用原始的「緩衝區」。 – OrangeDog 2012-07-17 20:14:56

2

我試圖讀取的文件是ANSI編碼。當我嘗試使用'fs'模塊的函數讀取它時,它無法執行擴展ASCII字符的轉換。

我剛剛發現nodepad ++能夠實際上從某些格式轉換爲UTF-8,而不是僅使用UTF-8編碼標記該文件。

轉換後,我能夠很好地閱讀它並將所需的所有操作應用到內容中。

謝謝您的回答!

0

我意識到這是一箇舊的帖子,但我發現它在我個人尋找解決這個特定問題的方法。

我寫了一個模塊,它提供了擴展ASCII解碼和編碼支持/從節點緩衝區。 You can see the source code here.這是我在瀏覽器中爲我創建的名爲BrowserFS的瀏覽器內文件系統實現的Buffer的一部分,但它可以獨立於NodeJS(或Browserify)中的任何內容使用,因爲它沒有依賴關係。

只需添加bfs-buffer到您的依賴關係,並做到以下幾點:

var ExtendedASCII = require('bfs-buffer/js/extended_ascii').default; 
// Decodes the input buffer as an extended ASCII string. 
ExtendedASCII.byte2str(aBufferWithText); 
// Encodes the input string as an extended ASCII string. 
ExtendedASCII.str2byte("Some text"); 

或者,只是適應模塊項目,如果你不想增加額外的依賴關係到項目中。它是MIT許可的。

我希望這可以幫助任何人在未來像我一樣在他們的搜索中找到這個頁面的人。:)