今天在改一个用BufferedReader读取UTF-8的html文件,读取出来后,文件头有个问号,解决方案很简单,将文件用UtrlEdit打开,然后另存为--格式选择
UTF-8 no bom,在读取就没有问题了,和大家分享一下,如果你也遇到同样的问题。
--------------------------------------------------------------------------------
下面是UTF-8与UTF-8(no bom)格式相比有什么不同,如果有兴趣可以读一下下面的内容。
BOM——Byte Order Mark,就是字节序标记在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在在Bo-Blog的wiki看到,同样使用PHP的Bo-Blog也一样受到BOM的困扰。其中有提到另一个麻烦:“受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。”这个应该就是Wordpress后台出现空白页面的原因了,因为任何一个被执行的文件包含了BOM,这三个字符都将被送出,导致依赖cookies和session的功能失效。解决的办法嘛,如果只包含英文字符(或者说ASCII编码内的字符),就把文件存成ASCII码方式吧。用UE等编辑器的话,点文件->转换->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用记事本打开,点另存为,选ASCII编码。如果包含中文字符的话,可以用UE的另存为功能,选择“UTF-8 无 BOM”即可。
分享到:
相关推荐
这个场景中,我们面临的挑战是如何正确处理UTF-8带有BOM(Byte Order Mark)的文件,因为BOM可能会导致文件内容显示为问号或者其他乱码。下面将详细介绍如何解决这个问题。 首先,我们需要理解什么是UTF-8的BOM。...
下面是一个简单的代码示例,展示了如何使用`UnicodeInputStream`和`UnicodeReader`来读取带有BOM的UTF-8文件: ```java import java.io.FileInputStream; import java.io.InputStreamReader; import java.io....
字符编码是用来表示文本的规则,常见的有ASCII、GBK(GB2312的扩展)、UTF-8等。ASCII是一种7位编码,仅支持英文字符;GBK是基于中文的编码,包含了大量的汉字和其他语言字符;而UTF-8是一种可变长度的Unicode编码,...
标题提到的“批量将Java源代码文件的编码从GBK转为UTF-8”是一个常见的需求,因为GBK编码是中国大陆广泛使用的编码方式,但它并不兼容Unicode,而UTF-8编码则是一种更通用的Unicode实现,能兼容多种语言字符。...
- 文件读取时,创建`InputStreamReader`或`BufferedReader`时指定字符编码为`"UTF-8"`。 - 文件写入时,创建`OutputStreamWriter`或`BufferedWriter`时同样指定编码为`"UTF-8"`。 - 当使用`DocumentBuilderFactory`...
3. **转换编码**:创建一个新的`OutputStreamWriter`和`BufferedWriter`,指定UTF-8作为输出流的字符编码,然后将GBK编码的字符流写入UTF-8编码的文件。 4. **保存和关闭流**:确保在转换完成后正确关闭所有流,以...
TXT 文件有四种编码选项:ANSI、Unicode、Unicode big endian 和 UTF-8。默认情况下,TXT 文件的编码格式是 ANSI 编码,也就是系统的默认编码,通常是 GBK 编码。其他格式则需要使用相应的编码格式来读取。 对于...
BufferedReader的用法---马克-to-win java视频缓存输入流的介绍
通过`InputStreamReader`,我们可以指定字符集(如UTF-8),从而正确地将字节解码为字符。 ### 关键知识点三:读取文件内容 一旦`BufferedReader`对象被创建,就可以调用`readLine()`方法来逐行读取文件内容。`...
还需要熟悉相关的编程接口和库函数,例如在Python中可以使用`open()`函数的`encoding='utf-8'`参数来指定文件的编码方式,而在Java中可以使用`InputStreamReader`和`BufferedReader`类组合来读取UTF-8编码的文件。...
在上述代码中,虽然没有明确指出使用的字符编码,但在实际应用中应考虑使用合适的字符集(如UTF-8),以避免乱码等问题的发生。 通过以上分析可以看出,该代码段主要展示了Java中如何进行基本的文件读写操作以及...
- UTF-8:这是一种变长编码,文件以 EF BB BF(字节顺序标记,BOM)开头,但不是所有 UTF-8 文件都有 BOM。 4. **检测文件编码**: - 检测文本文件的编码可以通过观察文件的字节顺序标记(BOM)或手动检查。对于...
以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadTextFile { ...
在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理非 ASCII 字符时可能会出现问题,尤其是当文件采用不同编码(如 UTF-16 或 UTF-8)时。 在提供的代码示例中,第一段代码使用 `BufferedReader`...
`BufferedReader`的构造函数接受一个`InputStreamReader`,用于指定字符编码(这里是UTF-8),以及一个缓冲区大小,8192字节是一个合理的默认值,但根据实际情况可以调整。 在处理大文件时,我们还需要考虑线程管理...
在Android平台上,开发人员经常遇到一个棘手的问题,那就是如何正确地读取包含中文字符的TXT文件,因为不恰当的处理往往会导致乱码。本文将深入探讨如何彻底解决这一问题,包括自动判断文档编码类型以及进行转码操作...
在这里,我们使用`InputStream`读取文件内容,然后创建一个字节数组,并用`UTF-8`编码转换成字符串。 **注意事项:** - 当JSON文件是通过文本编辑器创建时,确保其保存的编码与读取时使用的编码一致。大多数现代...
### 乱码问题与编码方式解决方案 ...通过上述方法,可以有效地解决由GBK、ISO 8859-1、UTF-8等不同编码方式引起的乱码问题。在实际应用中,还需要根据具体情况选择最合适的解决方案,确保数据的正确性和一致性。