編碼和換行

2021-07-25 17:08:00 字數 1419 閱讀 1166

最近在用node處理遮蔽字的時候需要讀取乙個檔案,原本編碼是utf8,但是拿到的遮蔽字編碼是gbk,所以需要對編碼進行轉換,伺服器是linux。

var illelg = fs.readfilesync(filepath).split('\r\n');
這是之前讀取的utf8檔案,結尾是'^m$' 也就是換行回車,拿到的gbk也是按照這個結尾的,分割('\r\n')是沒問題的,但是我用webstorm轉碼了,把gbk編碼轉成utf8,在linux開啟的時候就只剩下'$',然後在分割的時候會有問題,split('\n');

unix(或linux)系統中,每行結尾只有換行

\n,windows

中每行的結尾是

\n\r,mac

中每行的結尾只有

\r,所以在

windows

裡開啟unix

、mac

中的檔案,所有的文字會變成一行,而

windows

裡的檔案在

unix/mac

開啟的話,在每行的結尾可能會多乙個

^m符號

關於換行的問題可以看這篇文章:

主要說的是編碼問題,把gbk轉碼成utf8,需要用到乙個模組iconv。

fs檔案系統用readfilesync讀取檔案的時候,如果不指定編碼,會返回乙個buffer例項,或者也可以加'binary',buffer例項就是二進位制的,可以轉換其他的編碼,不過buffer支援轉換的物件沒有gbk。

ascii

utf8

utf16le:utf-16的小端編碼,支援大於u+10000的四位元組字元。

ucs2:utf16le的別名。

base64

hex:將每個位元組轉為兩個十六進製制字元。

所以需要用到iconv模組。

var iconv = require('iconv-lite')
然後將讀取到的檔案轉換,上面讀取遮蔽字檔案按照行分割,對於不同系統分割也有不同,需要在轉碼之後在分割,開始分割會是乙個陣列:

var fs = require('fs');

var iconv = require('iconv-lite');

var fsread = fs.readfilesync(filepath/*,'binary'*/);

var result = iconv.decode(fsread,'gbk');

對於fs會或讀取到乙個buffer例項,如果其他方式獲取到的不是buffer例項,可以轉一下

new buffer(str,'binary');
node中的buffer可以看一下api文件。

html textarea換行和dom換行

從事開發已經兩年多了,但是還是不會發現問題找原因,可能是自己一直在學校養成的習慣吧,不過最近在葛經理的帶領下開始學會找原因了,而且發現自己變得更成熟了。現在講講textarea和dom的換行吧,我們都知道dom換行是 而在textarea中換行是 r n 如果你把textarea獲取到的資料顯示在d...

Base64編碼換行問題

一般涉及到金錢的系統都會有簽名驗證這一步,基本上會將簽名的內容進行base64編碼,最近就遇到乙個問題,一直在驗籤失敗,最後發現是jar包的問題。對方提供的sdk中所用的base64工具類是commons codec 1.10.jar的,這種情況下進行encodebase64string得到的結果是...

csv編碼格式,儲存換行問題

之前遇到csv檔案編碼預設為ansi,程式讀取資料成功,後續呼叫其他平台api時,無法找到匹配字元,導致 bug,除錯了好長一段時間 在用excel檢視檔案時,發現有跳行 import csv list abc,def,gh 我是,一張,弓 中華,有神,功 with open rent3.csv w...