我正在编写一些评论过的PHP类,我偶然发现了一个问题.我的名字(对于@author标签)最终得到一个?(这是一个UTF-8字符,......和一个奇怪的名字,我知道).
即使我将文件保存为UTF-8,一些朋友报告说他们看到这个角色完全搞砸了(È™).添加BOM签名会消除此问题.但是这件事让我感到很麻烦,因为我不太了解它,除了我在维基百科上看到的以及其他一些类似的问题.
我知道它在文件的开头添加了一些东西,从我的理解它并没有那么糟糕,但我很担心,因为我读到的唯一有问题的场景涉及PHP文件.因为我正在编写PHP类来共享它们,所以100%兼容比在评论中使用我的名字更重要.
但我试图理解其含义,我应该使用它而不用担心吗?或者是否有可能造成损害的情况?什么时候?
我正在使用Python 2.7.12.使用此代码片段,我将保存一个utf-8 csv文件.我在文件的开头写了BOM.
import codecs
import csv
outputFile = open("test.csv", "wb")
outputFile.write(codecs.BOM_UTF8)
fieldnames = ["a", "b"]
writer = csv.DictWriter(outputFile, fieldnames, delimiter=";")
writer.writeheader()
row = dict([])
for i in range(10):
row["a"] = str(i).encode("utf-8")
row["b"] = str(i*2).encode("utf-8")
writer.writerow(row)
outputFile.close()
Run Code Online (Sandbox Code Playgroud)
我想加载该csv文件:
import codecs
import csv
inputFile = open("test.csv", "rb")
reader = csv.DictReader(inputFile, delimiter=";")
for row in reader:
print row["a"]
inputFile.close()
Run Code Online (Sandbox Code Playgroud)
上面的代码将失败:KeyError: 'a'
如果我打印行键,这就是它们的样子:[u'\ufeffa', u'b'].BOM已嵌入到密钥中a.我究竟做错了什么?
我有一个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.
请建议.
我得到一个FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.ReadWrite)然后一个StreamReader(stream,true).
有没有办法可以检查流是否以UTF8 BOM开头?我注意到没有BOM的文件被StreamReader读取为UTF8.
我怎么能分开呢?
我有一个带有BOM的UTF-8编码文件,想要删除BOM.是否有任何linux命令行工具从文件中删除BOM?
$ file test.xml
test.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
Run Code Online (Sandbox Code Playgroud) 您好,感谢您阅读我的帖子.
我的问题如下:我想用"javac"编译一个Java源文件,该文件是用BOM(操作系统是WinXP)进行UTF-8编码的.
以下是我的工作:
1)使用"记事本"创建文件,然后选择UTF-8编码
dos> notepad Test.java
"File -> Save as..."
File name : Test.java
Save as type: All Files
Encoding : UTF-8
Save
Run Code Online (Sandbox Code Playgroud)
2)在该文件中创建一个Java类并保存文件,如1)
public class Test
{
public static void main(String [] args)
{
System.out.println("This is a test.");
}
}
Run Code Online (Sandbox Code Playgroud)
3)可视化文件的十六进制版本(第一行)
dos> xxd Test.java | head -1
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class
Run Code Online (Sandbox Code Playgroud)
注意: ef bb bf是UTF-8编码的BOM(UTF-16编码的BOM是FE FF).
4)尝试使用"javac"编译此代码
dos> javac -encoding utf8 Test.java
Test.java:1: illegal character: \65279
?public class …Run Code Online (Sandbox Code Playgroud) 我有一个文本文件,开头有字节顺序标记(U + FEFF).我试图在R中读取文件.是否可以避免字节顺序标记?
函数fread(来自data.table包)读取文件,但?»æ在第一个变量名的开头添加:
> names(frame_pers)[1]
[1] "?Ⱦreg_date"
Run Code Online (Sandbox Code Playgroud)
同样是与read.csv功能.
目前我已经创建了一个从第一列名称中删除BOM的功能,但我相信应该有一种方法来自动剥离BOM.
remove.BOM <- function(x) setnames(x, 1, substring(names(x)[1], 4))
> names(frame_pers)[1]
[1] "?Ⱦreg_date"
> remove.BOM(frame_pers)
> names(frame_pers)[1]
[1] "reg_date"
Run Code Online (Sandbox Code Playgroud)
我正在使用R会话的本机编码:
> options("encoding" = "")
> options("encoding")
$encoding
[1] ""
Run Code Online (Sandbox Code Playgroud) 我有一个HTTPHandler,它读取一组CSS文件并将它们组合起来然后GZipping它们.但是,一些CSS文件包含一个字节顺序标记(由于TFS 2005自动合并中的一个错误),而在FireFox中,BOM被作为实际内容的一部分被读取,因此它搞砸了我的类名等.我怎样才能剥离出BOM字符?有没有一种简单的方法可以在没有手动浏览字节数组的情况下查找""?
我已将数据从SQL Server Management Studio中的结果网格导出到csv文件.csv文件看起来正确.
但是当我使用read.csv将数据读入R数据帧时,第一列名称前缀为" ï.. ".我如何摆脱这个垃圾文本?
例:
str(trainData)
'data.frame': 64169 obs. of 20 variables:
$ ï..Column1 : int 3232...
$ Column2 : int 4242...
Run Code Online (Sandbox Code Playgroud)
数据看起来像这样(没什么特别的):
Column1,Column2
100116577,100116577
100116698,100116702
byte-order-mark ×10
utf-8 ×6
c# ×2
java ×2
r ×2
command-line ×1
csv ×1
file ×1
filestream ×1
javac ×1
key ×1
linux ×1
oracle10g ×1
php ×1
python ×1
streamreader ×1
unicode ×1
vi ×1