首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

hadoop解决汉语输出乱码(二)

2013-04-21 
hadoop解决中文输出乱码(二)hadoop涉及输出文本的默认输出编码统一用没有BOM的UTF-8的形式,有很多软件只能

hadoop解决中文输出乱码(二)
   hadoop涉及输出文本的默认输出编码统一用没有BOM的UTF-8的形式,有很多软件只能靠文件的BOM才能成够识别编码为UTF-8的文件,因此当用此类软件打开文件时,显示的是乱码。为了能够正常显示文件内容,在输出内容到文件内之前,先写入BOM(0xEFBBBF)即可。
   Map Reduce运行的结果是一些列文件,通过使用如下函数将输出文件归并到一个文件中:

/** Copy all files in a directory to one output file (merge). */  public static boolean copyMerge(FileSystem srcFS, Path srcDir,                                   FileSystem dstFS, Path dstFile,                                   boolean deleteSource,                                  Configuration conf, String addString) throws IOException {    dstFile = checkDest(srcDir.getName(), dstFS, dstFile, false);    if (!srcFS.getFileStatus(srcDir).isDirectory())      return false;       OutputStream out = dstFS.create(dstFile);    out.write(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF}); // 写入BOM    try {      FileStatus contents[] = srcFS.listStatus(srcDir);      Arrays.sort(contents);      for (int i = 0; i < contents.length; i++) {        if (contents[i].isFile()) {          InputStream in = srcFS.open(contents[i].getPath());          try {            IOUtils.copyBytes(in, out, conf, false);            if (addString!=null)              out.write(addString.getBytes("UTF-8"));                          } finally {            in.close();          }         }      }    } finally {      out.close();    }        if (deleteSource) {      return srcFS.delete(srcDir, true);    } else {      return true;    }  } 

热点排行