トップページへ

RUST言語におけるUTF8ファイルのBOMの削除の例示

Access Count : 1453

Copyright © 2021 TAKEHANA TADASHI
著作日時:2021.11.10.水. 11:45:00 著作者:竹花 忠
更新版著作日時:2022.03.24.木. 08:01:00 著作者:竹花 忠
RUST言語におけるUTF8ファイルのBOMの削除の例示:
 ファイルの先頭の3バイトにBOMが付加されていたなら、それを削除するプログラム例。
 ここで、contentsは、ファイルの全内容を読み込んだ文字列スライスとする。
新バージョン:
  let &(mut lineupd);
  for (i,line) in contents.lines().enumerate(){
    lineupd = line;
    if i == 0 && line.len() >= 3{
      let bytes = line.as_bytes();

      if bytes[0]==239 && bytes[1]==187 && bytes[2]==191{
        (_, lineupd) = line.split_at(3);
      }
    }
    println!("lineupd = {}", lineupd);//lineupdは、BOMの削除された可変文字列スライス。
  }
 ちなみに、.split_at(3)は、文字列スライスを、その先頭から3文字までの文字列スライスと、4文字目以降の文字列スライスとに分割して、タプルにして返すメソッドである。
 したがって、上記の(_, lineupd) = line.split_at(3);あっては、タプルの2番目の要素であるlineupdに、BOMの直後からの文字列スライスが設定される。

旧バージョン:
  let mut linestr:String;
  let &(mut lineupd);
  for (i,line) in contents.lines().enumerate(){
    lineupd = line;
    if i == 0 && line.len() >= 3{
      let bytes = line.as_bytes();

      if bytes[0]==239 && bytes[1]==187 && bytes[2]==191{
        let mut strline = line.to_string();
        let ll = strline.as_mut_str();
        let b = unsafe{ll.as_bytes_mut()};
        b[0] = b' ';
        b[1] = b' ';
        b[2] = b' ';

        let mut cv : Vec = strline.chars().collect();
//        println!("cv = {:?}", cv);
        cv.remove(0);
        cv.remove(0);
        cv.remove(0);
//        println!("cv = {:?}", cv);
        linestr = cv.iter().collect();
        lineupd = &linestr;
      }
    }
    println!("lineupd = {}", lineupd);//lineupdは、BOMの削除された可変文字列スライス。
  }