【问题标题】:BOM in Windows and UnixWindows 和 Unix 中的 BOM
【发布时间】:2014-07-11 11:15:21
【问题描述】:

我用行编写新文件,需要带有 BOM 的 utf-8。在我的代码中,我以最简单的方式添加 BOM:

printStream.print('\ufeff');
// print lines

在 Win7 中这个方法工作正常,但是当我在 Unix 中执行我的 jar 时,我看到“?”在 prolog 和“没有 bom 编码的 utf-8”中,我该如何解决?跨平台首选... 答案:

char[] c = {0xEF, 0xBB, 0xBF};
        for(int i=0; i<3; i++){
            printStream.write(c[i]);
        }

【问题讨论】:

  • 您是使用完全相同的工具查看文件还是使用特定于操作系统的查看器?如果特定于操作系统,Unix 上的查看器可能无法正确解释 bom。
  • 同一个工具,记事本++。我在 Unix 上生成它,添加到存档并在 Windows 中打开(我只有 SCP 到 Unix 系统)
  • 听起来BOM不是直接写的而是UTF-8编码的

标签: java byte-order-mark


【解决方案1】:

我不确定printStream.print('\ufeff'); 是否是编写 utf-8 bom 的正确方法。您可以尝试直接写入字节EF BB BF

例子:

char[] bom = { 0xEF, 0xBB, 0xBF }; 
//or byte[] bom= { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };
printStream.write( bom ); //directly write the bytes

【讨论】:

  • 你能用 printStream.print('') 写例子吗?
  • char[] c = {0xEF, 0xBB, 0xBF}; for(int i=0; i
  • 它应该只有两个字节。
  • @user2271546 当你写字节时你不应该使用print() 可能应用编码的方法
  • 哇,它有效,THX 但我使用 char[],编译器不喜欢 byte[] bom = { 0xEF, 0xBB, 0xBF };
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2012-02-11
相关资源
最近更新 更多