发现bug:
在服务器上部署后台服务并验证能够正常运行,但是一次修改配置重启后突然出现了一个空指针bug,部署的程序并没有改变
2. 定位bug:
空指针定位到一个变量,查找代码发现变量初始化来自于读取配置文件,但是检查配置文件中有正常配置相应值,所以无法找到原因。
后来在开发机器上调试服务都没有问题,只好重新部署服务到服务器,发现是能够正常运行。
比较两次部署的服务包,内容完全一致,唯独配置文件的二进制不同,使用十六进制查看配置文件,发现文件开头多出了3个字节的BOM头。
3. 解决bug:
使用文本编辑工具将配置文件的BOM头去掉后,重新启动服务,验证能够正常运行。
4. 分析bug:
- Bug产生的原因:Windows系统对Unicode编码的文本文件会使用BOM头来定义编码方式和字节序,如果使用记事本编辑Unicode文件保存后就会默认添加BOM头。而Java的原生IO并不会处理BOM头,会将BOM头视为普通内容,JDK Bug中有此记录,详见JDK Bug 4508058,结论是该Bug不会修复,为了更好的适应性。
- Bug的避免:
- 建议不使用Unicode编码的配置文件,有些IDE默认都是ISO8859-1,这样兼容性最好。
- 在Windows系统上编辑文本文件需要使用编辑工具,不要默认使用记事本,编辑要注意BOM头问题。
- 为使程序兼容性更好,读取文件时程序应识别并去掉BOM头。已提供读取配置文件工具,源码详见UnicodeInputStream。
- 下载resource-utils库或者可以引入maven依赖库
<groupId>net.sunyijun</groupId>
<artifactId>resource-utils</artifactId>
使用该工具库读取配置可以兼容BOM头。具体用法详见README。
附BOM头规则:
00 00 FE FF = UTF-32, big-endian
FF FE 00 00 = UTF-32, little-endian
EF BB BF = UTF-8,
FE FF = UTF-16, big-endian
FF FE = UTF-16, little-endian
相关推荐
Tomcat 5.5 中文乱码问题可以通过修改配置文件和使用 Filter 来解决。例如,可以在 web.xml 文件中添加以下代码: ```xml <filter-name>Set Character Encoding <filter-class>filters....
9. **配置选项**:开发者可以通过连接URL或配置文件设置各种参数,以调整连接行为,例如设置超时、启用或禁用自动重连、指定默认的字符集等。 10. **异常处理**:当数据库操作失败时,MySQL Connector/J会抛出相应...
Java本身在设计上采用了统一的Unicode编码标准,即在文件存储、编译以及JVM运行时均采用Unicode编码。然而,在实际的应用场景中,客户端和服务端之间可能存在编码方式不一致的情况,这就需要开发者采取措施确保编码...
10. Eclipse-rbe:Eclipse-rbe是一款用于编辑Java文件的插件,能够提供缺失变量的警告、键值排序和Unicode编码转换等功能。 11. ApacheIvyDE:这个插件集成了Apache Ivy的依赖管理功能,能够管理项目中的依赖关系,...
5. **AndroidManifest.xml**:这是每个Android应用的核心配置文件,声明应用的组件、权限和其他重要属性,包括动态壁纸服务的注册。 6. **GB编码**:GB编码是中国国家标准的汉字编码,与Unicode(UTF-8)相比,其对...
(对于大部分JAR电子书都,可以从文件管理器中找到非.class结尾的文件,并且选择打开为UNICODE/TXT阅读) (对于NOKIA手机及其它部分手机,由于安全策略的限制,在Anyview的文件管理器中无法查看后缀为.jar的文件) ...
- `conf`目录:可能包含了一些示例配置文件或默认设置,帮助用户配置驱动参数。 - `x86`目录:可能包含特定于32位系统的库或资源,如果驱动需要的话。 - `html`目录:可能包含帮助文档或者用户手册的HTML格式版本。 ...
在处理含有中文字符的路径时,需要确保系统和SonarQube支持Unicode编码,以防止乱码发生。可能需要调整文件系统的编码设置,或者在运行SonarQube分析时提供适当的编码参数。 SonarQube的汉化插件`sonar-l10n-zh-...
1、修正 "for %%" 字串(在“批处理文件”语法高亮方案下)可能导致程序出错的 bug; 2、添加状态栏的编码部分双击切换编码格式,右击弹出编码格式选择菜单; 3、添加默认编码格式在常规设置页面中; 4、添加一个 ...
7. **项目结构**:压缩包内的文件和目录结构通常反映出项目代码的组织方式,如源代码、资源文件、配置文件等。 8. **时间线管理**:从两个不同版本的时间戳来看,项目经历了至少一次迭代,反映了软件开发中的持续...
至于压缩包内的文件列表,虽然没有具体给出,但通常会包含JSP文件、Java源代码、样式表(CSS)、图像资源、JavaScript文件以及可能的配置文件。这些文件共同构成了盈盈通JSP网络聊天软件的完整框架。开发者可能使用...
- **conf**目录:可能包含示例配置文件或驱动相关的配置信息。 - **html**目录:可能包含用户手册或其他文档的HTML版本。 - **XA**目录:可能涉及与X/Open XA相关的资源,这对于处理分布式事务是必要的。 5. **...
通过修改my.cnf或my.ini配置文件中的`character_set_server`和`collation_server`参数,可以全局设置MySQL的字符集和排序规则。使用`SHOW VARIABLES LIKE 'char%'`命令可查看当前配置。 #### 字符集相关BUG分析 ...
解决这类问题通常需要深入理解Unicode编码标准、字形渲染以及操作系统如何处理文本显示。 在修复这个bug的过程中,开发者可能涉及以下几个关键知识点: 1. **字符编码**:理解Unicode和各种变种,如UTF-8、GBK等,...
7. **Unicode支持**:Notepad++支持Unicode和UTF-8编码,确保了跨语言文件的正确处理。 8. **自定义工具**:用户可以设置自定义的外部工具,例如编译器、解释器或者版本控制系统,将这些工具集成到Notepad++中,...
3. **配置文件编辑**:修改系统或应用程序的配置文件时,Notepad++的编码转换和文本搜索功能十分便捷。 4. **批量文本处理**:结合宏和正则表达式,可以实现批量文本替换和格式化,大大节省时间。 总之,Notepad++...
- **编码支持**:支持多种字符编码,包括ASCII、Unicode等。 - **可定制性**:用户可以通过配置文件调整编辑器的主题、快捷键、语言设置等。 **3. V1.76版本更新** - **性能优化**:新版本通常会针对性能进行优化,...
1. 添加依赖:将jtds-1.3.1.jar文件复制到项目库或指定的类路径中,确保在运行时能够被Java虚拟机找到。 2. 配置连接参数:创建一个DataSource或Connection对象时,需要提供服务器地址、端口、数据库名、用户名和...
* -pi 命令行选项指定了不同的工程配置文件 * 字符串插入支持 Perl 语法加亮 * 单词 (文字) 加亮现在支持选择不同的单词 (文字) * 新增“恢复默认值”按钮 (在字体对话框) * 在颜色拾取器显示颜色代码 * 添加“使用...
7. **编码格式转换**:Notepad++支持多种编码格式,如ASCII、UTF-8、Unicode等,方便处理不同编码的文件。 8. **自动完成**:提供一定程度的代码自动完成功能,提高编程效率。 9. **宏录制和回放**:用户可以录制...