Got an exception - Unexpected character 0xfeff in identifier

本文介绍了一种在使用CheckStyle检查Java代码时遇到的“Gotanexception-Unexpectedcharacter0xfeffinidentifier”错误的原因及解决方案。该问题由文件编码不一致引起,文中详细对比了出错文件与其他正常文件的编码差异,并提供了更改文件编码的具体步骤。

背景:用CheckStyle检查Java代码。有两个Java文件出现了错误“Got an exception - Unexpected character 0xfeff in identifier”。

原因:经过搜索,发线出错的Java文件编码和CheckStyle设置的编码不同。CheckStyle里设置的编码是UTF-8。

在Eclipse查看出错文件的编码如下:


而没有出错的Java文件编码如下:


注意:少了红色框的内容。

用NotePad将打开出错的Java文件,查看文件编码是:


而打开一个没有报错的Java文件,文件编码则是:


也就是说出错的Java文件的编码和其他文件编码不同。

解决:将出错Java文件编码改为和其他文件相同即可。

参考:

http://blog.youkuaiyun.com/shrekmu/article/details/1634483

http://osdir.com/ml/java.audit.checkstyle.devel/2007-05/msg00004.html

http://mygolang.blogspot.com/2010/09/invalid-identifier-character-0xfeff.html

### 解决 `pdfjs-dist` 中出现 `Unexpected character '#'` 的错误 在使用 `pdfjs-dist` 时,如果遇到 `Unexpected character '#'` 的错误,通常是由于 Webpack 配置不正确导致的。具体来说,`pdfjs-dist` 使用了 ES Module 语法(如 `import.meta` 或者动态导入),而这些语法可能未被 Webpack 正确解析[^1]。 以下是解决问题的完整方法: #### 1. 确保正确的 Webpack 配置 在 Webpack 配置中,需要明确指定 `pdfjs-dist` 的加载方式。通常情况下,`pdfjs-dist` 需要通过 `resolve.fallback` 或者 `externals` 来处理其依赖项。例如: ```javascript const path = require('path'); module.exports = { resolve: { fallback: { fs: false, // pdfjs-dist 不需要 fs 模块 path: require.resolve('path-browserify'), // 如果需要 path 模块,则使用浏览器版本 }, }, module: { rules: [ { test: /\.m?js$/, resolve: { fullySpecified: false, // 允许部分文件不遵循严格规范 }, }, ], }, }; ``` 上述配置确保了 Webpack 能够正确解析 `pdfjs-dist` 的模块,并避免了因路径或模块解析问题引发的错误[^1]。 #### 2. 检查 Babel 配置 如果项目中使用了 Babel,则需要确保 Babel 不会转换 `pdfjs-dist` 的代码。可以通过以下配置实现: ```javascript module.exports = { presets: [ ['@babel/preset-env', { targets: { esmodules: true } }], ], ignore: ['node_modules/pdfjs-dist'], // 忽略 pdfjs-dist 的转换 }; ``` 这样可以保证 `pdfjs-dist` 的原始代码结构不被破坏,从而避免 `Unexpected character '#'` 的错误。 #### 3. 确保正确的依赖版本 有时,`pdfjs-dist` 的版本与 Webpack 或其他工具链版本不兼容,也会引发类似错误。建议检查以下依赖版本: - `pdfjs-dist`: 推荐使用最新稳定版本。 - `webpack`: 至少使用 v5 版本。 - `babel-loader`: 确保版本与 Webpack 兼容。 可以通过以下命令更新依赖: ```bash npm install pdfjs-dist webpack babel-loader --save-dev ``` #### 4. 使用 Polyfill 如果项目运行在较旧的浏览器环境中,可能需要引入一些 Polyfill 来支持现代 JavaScript 特性。例如: ```javascript import 'core-js/stable'; import 'regenerator-runtime/runtime'; ``` 将上述代码添加到项目的入口文件中,以确保所有浏览器都能正常运行[^1]。 --- ### 示例代码 以下是一个完整的 Webpack 配置示例: ```javascript const path = require('path'); const webpack = require('webpack'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, module: { rules: [ { test: /\.m?js$/, exclude: /node_modules\/pdfjs-dist/, // 排除 pdfjs-dist use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], }, }, }, ], }, resolve: { fallback: { fs: false, path: require.resolve('path-browserify'), }, }, plugins: [ new webpack.ProvidePlugin({ React: 'react', // 自动注入 React }), ], }; ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值