小编Sig*_*l15的帖子

没有BOM的UTF-8

我有javascript文件,我需要它们以UTF-8(没有BOM)保存,每当我在Notepad ++中将它们转换为正确的格式时,当我在Visual Studio中打开它们时,它们将恢复为带有BOM的UTF-8.我如何阻止VS2010这样做呢?

另一个问题是,Visual Studio中没有签名的UTF-8与没有BOM的UTF-8相同吗?

byte-order-mark visual-studio-2010 visual-studio

173
推荐指数
6
解决办法
7万
查看次数

如何在java中添加UTF-8 BOM

我有一个Java存储过程,它使用Resultset对象从表中获取记录并创建一个csv文件.

BLOB retBLOB = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
retBLOB.open(BLOB.MODE_READWRITE);
OutputStream bOut = retBLOB.setBinaryStream(0L);
ZipOutputStream zipOut = new ZipOutputStream(bOut);
PrintStream out = new PrintStream(zipOut,false,"UTF-8");
out.write('\ufeff');
out.flush();
zipOut.putNextEntry(new ZipEntry("filename.csv"));
while (rs.next()){
    out.print("\"" + rs.getString(i) + "\"");
    out.print(",");
}
out.flush();
zipOut.closeEntry();
zipOut.close();
retBLOB.close();
return retBLOB;
Run Code Online (Sandbox Code Playgroud)

但生成的csv文件未显示正确的德语字符.Oracle数据库的NLS_CHARACTERSET值也为UTF8.

请建议.

java byte-order-mark character-encoding oracle10g

18
推荐指数
5
解决办法
6万
查看次数

使用Perl从字符串中删除BOM

我有以下问题:我正在读取UTF-8文本文件(我告诉Perl我这样做是通过":encoding(utf-8)").

该文件在十六进制查看器中如下所示:EF BB BF 43 6F 6E 66 65 72 65 6E 63 65

打印时,这会转换为"∩╗┐Conference".我理解我被警告的"广角"是BOM.我想摆脱它(不是因为警告,而是因为它弄乱了我后来进行的字符串比较).

所以我尝试使用以下代码删除它,但我失败了:

$ line = ~s/^\xEF\xBB\xBF //;

任何人都可以告诉我如何从我通过读取UTF-8文件的第一行获得的字符串中删除UTF-8 BOM?

谢谢!

string perl text byte-order-mark utf-8

14
推荐指数
3
解决办法
6922
查看次数

在eclipse中没有BOM编码的utf8

经过一番头疼后,我发现使用set encoding UTF8(带BOM)的eclipse会导致错误.当您使用包含导致网页标题在chrome中体内呈现时,它会导致添加空格.

即.在index.php上,在当然之前或之​​后没有间隙

<?php include_once('header.php'); ?><body>test</body>
Run Code Online (Sandbox Code Playgroud)

和header.php有(当然没有间隙)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test title</title>
</head>
Run Code Online (Sandbox Code Playgroud)

然后测试标题出现在正文中(不在视图源中,而是在chrome中的控制台中).这会在页面顶部产生间隙.

在notepad ++中打开index.php和header.php,并在没有BOM的情况下将编码更改为UTF8解决了这个问题.我怎样才能在Eclipse中解决这个问题?!切换到记事本++是不可取的,在eclipse中有太多很好的功能是有用的(更好的自动完成,自动版本控制等).

给我一个谜......

php eclipse byte-order-mark

12
推荐指数
2
解决办法
9388
查看次数

从Java中的字符串中删除BOM

我有文件中的字符串,其中包含BOM(来自UTF-8).我想将此字符串转换为win-1251并将其放入文件中.

我试图以这种方式从字符串中删除BOM:

out.write(l.replace('\uFEFF','\0') + "\n");
Run Code Online (Sandbox Code Playgroud)

但它不起作用.为什么?

在win-1251文件中输出此字符串:

?1,...SOME_TEXT_HERE
Run Code Online (Sandbox Code Playgroud)

第一个"?" 标志是非法的.

java encoding byte-order-mark utf-8

8
推荐指数
1
解决办法
1万
查看次数

编写没有BOM的UTF-8

这段代码,

OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes());
Run Code Online (Sandbox Code Playgroud)

还有这个,

OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes(StandardCharsets.UTF_8));
Run Code Online (Sandbox Code Playgroud)

产生相同的结果(在我看来),这是没有BOM的UTF-8.但是,Notepad ++没有显示有关编码的任何信息.我希望notepad ++在这里显示为Encode in UTF-8 without BOM,但在"编码"菜单中没有选择编码.

现在,此代码使用BOM编码以UTF-8编写文件.

 OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
 byte[] bom = { (byte) 239, (byte) 187, (byte) 191 };
 out.write(bom);
 out.write("A".getBytes()); 
Run Code Online (Sandbox Code Playgroud)

Notepad ++也将编码类型显示为Encode in UTF-8.

问题:前两个代码有什么问题,假设用UTF-8编写文件没有BOM?我的Java代码是做正确的吗?如果是这样,notepad ++试图检测编码类型是否有问题?

记事本++只能猜测吗?

java unicode byte-order-mark notepad++ utf-8

6
推荐指数
1
解决办法
2万
查看次数

在Powershell中使用BOM读取XML文件

Powershell似乎是在使用unicode BOM的xml文件上进行抨击 - 代码:

$xml = [xml]{ get-content $filename }
Run Code Online (Sandbox Code Playgroud)

炸毁"根级数据无效".

有没有一个简单的方法来做到这一点,而不是摆弄文件的内容?

xml powershell byte-order-mark

3
推荐指数
1
解决办法
2266
查看次数

ICU字节订单标记(BOM)

我正在使用ICU的ustdio函数将UnicodeString对象写入一系列编码中的文件,但它似乎不会添加BOM.

我的代码:

void write_file(const char* filename, UnicodeString &str) {

    UFILE* f = u_fopen(filename, "w", NULL, "UTF-16 LE");
    u_file_write(str.getTerminatedBuffer(), str.length() + 1, f);
    u_fclose(f);
}

int _tmain(int argc, _TCHAR* argv[])
{
    UnicodeString str(L"?????????");

    write_file("test.txt", str);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我将LE更改为BE时,文件编码会进行交换,但是没有BOM,十六进制编辑器中的输出文件是:

A0 03 B1 03  C1 03 B8 03  AD 03 BD 03  C9 03 BD 03  97 03 00 00
Run Code Online (Sandbox Code Playgroud)

注意:如果我将代码页设置为"UTF-16",则会有一个BOM,但是一旦我手动指定了字节序,它就会消失.

或者有没有办法将UnicodeString写入带有BOM的文件?

c++ unicode byte-order-mark endianness icu

3
推荐指数
1
解决办法
1104
查看次数

无法使用powershell函数在数组中添加元素

我有一个奇怪的问题,我有一个非常简单的功能。

这是我的 PowerShell 代码

$exclude = @()

function GetOracleDb {
param([string]$servername)
$exclude += $servername
}

GetOracleDb "Myserver2"

$exclude
Run Code Online (Sandbox Code Playgroud)

为什么我的 $exclude 数组是空的?

谢谢你的帮助

powershell scripting function powershell-2.0 powershell-3.0

2
推荐指数
1
解决办法
2043
查看次数