Rust导入mod时报Invalid UTF-8 Stream错误及模块导入用法咨询
问题解决方案
1. module_b/mod.rs UTF-8编码报错排查
- 首先确认文件编码:Rust编译器要求所有源文件必须为UTF-8编码,Windows下编辑器经常默认将文件保存为GBK/GB2312编码,会触发该报错。可以在VS Code右下角查看当前文件编码,点击后选择「通过编码重新打开」-> 选择UTF-8,再点击一次编码区域选择「通过编码保存」-> 选择UTF-8即可修复。
- 排查隐藏字符:如果编码修改后仍报错,检查文件中是否存在复制粘贴带入的不可见控制字符、全角空格等,可以将mod.rs内容全部删除,手动重写现有代码测试。
- 排查文件损坏:确认是否错误将二进制文件、加密文件重命名为mod.rs,或文件被其他程序锁定/损坏,可删除mod.rs后重新创建写入代码。
额外提示:你当前module_b/mod.rs中定义的函数名为
mod_a_function,但main.rs中导入的是mod_b_function,编码问题修复后会触发未找到函数的报错,提前修改函数名即可避免。
2. helper3.rs调用helper2.rs代码的实现
helper2和helper3是同属于module_b的同级子模块,有两种可用导入写法:
- 相对路径写法(推荐用于同模块内调用):
在helper3.rs开头添加:
后续代码中直接调用use super::helper2::helper2_function;helper2_function()即可。 - 绝对路径写法:
在helper3.rs开头添加:
调用方式和相对路径导入一致。use crate::module_b::helper2::helper2_function;
3. module_b/mod.rs调用module_a/mod.rs的写法确认
你提到的use crate::module_a写法是完全正确的。crate前缀代表从项目根模块(即main.rs)的路径开始寻址,module_a是根模块下声明的顶级模块,直接通过crate::module_a导入即可,示例:
// module_b/mod.rs 中写入 use crate::module_a; // 调用module_a下的方法示例 pub fn test_call() { module_a::mod_a_function(); }
内容的提问来源于stack exchange,提问作者Lacrosse343
相关产品推荐
相关产品推荐

