首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将包含特殊字符(UTF-8)的HTML页面保存为txt文件

如何将包含特殊字符(UTF-8)的HTML页面保存为txt文件
EN

Stack Overflow用户
提问于 2012-09-01 11:12:22
回答 1查看 2.4K关注 0票数 2

我需要做一个java代码,保存一个html到一个txt文件。

问题是UTF-8中的特殊字符被破坏了。

像"Hamamélis“这样的单词就被保存为”“。

下面列出了我编写的代码:

代码语言:javascript
复制
    URLConnection conn;
                    conn = site.openConnection();
                    conn.setReadTimeout(10000);
                    Charset charset = Charset.forName("UTF8");
                    BufferedReader in = new BufferedReader( new InputStreamReader(  conn.getInputStream(), "UTF-8"   )   );
                    buff = in.readLine();

在此之后:

代码语言:javascript
复制
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(Nome), "UTF-8"));
out.write(buff);
out.close();

有人能给我一个解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-01 14:58:48

一个可能的错误是在第一段代码的第4行省略了"UTF-8“中的连字符。请参阅CharSet文档。

否则,代码看起来是正确的。但是我们当然不能直接测试它,因为我们没有你的数据。

为了便于比较,下面是我编写的一个小类。以与您的代码类似的方式,这个类正确地将您的"Hamamélis“示例的重音'e‘写为UTF-8中单个(非规范化)字符的两个八位字节:十六进制的'C3’和'A9‘。

代码语言:javascript
复制
    import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.io.IOException;

public class ReaderWriter {
    public static void main(String[] args) {
        try {
            String content = "Hamamélis. Written: " + new java.util.Date();

            File file = new File("some_text.txt");

            // Create file if not already existent. 
            if (!file.exists()) {
                file.createNewFile();
            }

            FileOutputStream fileOutputStream = new FileOutputStream( file );
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter( fileOutputStream, "UTF-8" );
            BufferedWriter bufferedWriter = new BufferedWriter( outputStreamWriter );
            bufferedWriter.write( content );
            bufferedWriter.close();

            System.out.println("ReaderWriter 'main' method is done. " + new java.util.Date() );

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

正如icktoofay评论的那样,你应该更深入地挖掘,以确切地发现涉及到哪些八位字节。使用十六进制编辑器,就像我今天在Mac app Store上找到的"File Viewer“应用程序一样,可以查看保存文件中的确切八位字节。

如果二进制八位数是C3和A9,那么问题很简单,您用来将文件视为文本的文本编辑器使用了错误的字符编码。例如,您可以在web浏览器中打开该文本文件,然后使用其菜单命令将该文件重新解释为UTF-8。

如果二进制八位数不是C3 & A9,我将进一步检查输入的二进制八位数。

如果您不理解计算机中的文本文件实际上包含数字(而不是人类意义上的文本),那么可以从编码中抽出时间来阅读这篇有趣的文章:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12224601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档