在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近做了一个用户上传文件,然后在服务器端解析上传文件的功能,由于不知道用户上传文件的编码类型所以必须进行强制转换。 原本用的方法是: Iconv.conv('utf-8' , 'cp932', string) 这样可以强制把 'cp932'的字符编码转换为'utf-8'。过了阵子出现某些上传文件开头部分出现莫名字符的问题。查了一下,如果输入的是有签名的UTF-8就会出错: UTF-8签名(UTF-8 signature)也叫做BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。如果多个文件设置了签名,在二进制流中就会包含多个UTF-8签名,而IE是无法识别多个UTF-8签名的,所以用一个空行来代替,在某些程序处理中还会出现一个类似“诺”的字符。
Iconv.conv只能将一种字符编码转换为另外一种,很不方便 后来发现ruby后来又加入了一个叫NKF类,可以将任何其他编码转换为指定的编码格式,这样就能彻底解决我的问题。 例: string= NKF.nkf("-w", string) nkf库文件介绍: nkf库文件由NKF模块提供。NKF模块原是用于UNIX而制作的nkf(Network Kanji code conversion Filter)的过滤器指令,现在在Ruby中也用得到。 在NKF模块中,通过指定文件编码,使用类似命令行选项的字符串。 NKF.nkf(可选字符串, string) nkf的主要选项可参看下表: 选项 意义 -d 在换行文字中删除CR -c 在换行文字中增加CR -x 不对半角假名进行转换 -m0 限制对MIME的处理 -e 输出文字编码方式为EUC-JP -s 输出文字编码方式为Shift_JIS -j 输出文字编码方式为ISO-2022-JP -w 输出文字编码方式为UTF-8(无BOM) -w8 输出文字编码方式为UTF-8(有BOM) -w80 输出文字编码方式为UTF-8(无BOM) -w16 输出文字编码方式为UTF-16(Big Endian/无BOM) -w16B 输出文字编码方式为UTF-16(Big Endian/有BOM) -w16B0 输出文字编码方式为UTF-16(Big Endian/无BOM) -w16L 输出文字编码方式为UTF-16(Little Endian/有BOM) -w16L0 输出文字编码方式为UTF-16(Little Endian/无BOM) -E 输出文字编码方式为EUC-JP -S 输出文字编码方式为Shift_JIS -J 输出文字编码方式为ISO-2022-JP -W 输出文字编码方式为UTF-8(无BOM) -W8 输出文字编码方式为UTF-8(有BOM) -W80 输出文字编码方式为UTF-8(无BOM) -W16 输出文字编码方式为UTF-16(Big Endian/无BOM) -W16B 输出文字编码方式为UTF-16(Big Endian/有BOM) -W16B0 输出文字编码方式为UTF-16(Big Endian/无BOM) -W16L 输出文字编码方式为UTF-16(Little Endian/有BOM) -W16L0 输出文字编码方式为UTF-16(Little Endian/无BOM)
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论