标签:std UTF let BOM file input 内容 文本
问题
运行如下代码及产生的错误
package xxx
object RedisMain {
def main(args: Array[String]): Unit = {
println("aa")
}
}
illegal character '\ufeff'
package xxx
解决方法
由with BOM修改为无
重新创建文件代码再copy运行,成功
通常把文件保存为不带BOM的UTF-8
文件
BOM
介绍
BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部。
字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。
在不同的Unicode编码中,对应的bom的二进制字节如下:
FE FF UTF16BE
FF FE UTF16LE
EF BB BF UTF8
可以根据文件头部的几个字节和上面的表格对应来判断该文件是哪种编码形式。
use std::env;
use std::fs::File;
use std::io::{prelude, Read};
fn main() -> std::io::Result<()> {
let mut param = env::args();
if param.len() != 2 {
return Err(std::io::Error::new(
std::io::ErrorKind::Other,
"usage: input file path which contains bom",
));
}
let a = param.next();
println!("a = {:?}", a);
let input_file_path = param.next();
let mut input_file = File::open(input_file_path.unwrap())?;
let mut buffer = [0u8; 16];
while let std::io::Result::Ok(len) = input_file.read(&mut buffer) {
if len == 0 {
break;
} else {
for i in 0..len {
// print!("{:02x}", i);
print!("{:X}", buffer[i]);
}
println!("\r");
}
}
Ok(())
}
EFBBBF2F2F7061636B61676520636F6D
2E626C2E626967646174612E6364705F
...
标签:std,UTF,let,BOM,file,input,内容,文本 来源: https://blog.csdn.net/rustwei/article/details/120702479
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。