标签: byte-order-mark

在Python中处理UTF-8数字

假设我正在读取包含3个逗号分隔数字的文件.该文件使用未知编码保存,到目前为止我正在处理ANSI和UTF-8.如果文件是UTF-8并且它有1行,值为115,113,12,那么:

with open(file) as f:
    a,b,c=map(int,f.readline().split(','))
Run Code Online (Sandbox Code Playgroud)

会抛出这个:

invalid literal for int() with base 10: '\xef\xbb\xbf115'
Run Code Online (Sandbox Code Playgroud)

第一个数字总是被这些'\ xef\xbb\xbf'字符破坏.对于其余2个数字,转换工作正常.如果我用''手动替换'\ xef\xbb\xbf'然后进行int转换它将起作用.

对于任何类型的编码文件,有更好的方法吗?

python byte-order-mark utf-8 character-encoding

11
推荐指数
2
解决办法
9596
查看次数

字节顺序标记真的是有效的标识符吗?

C++ 11对标识符(§E)中允许的Unicode代码点列表进行了大量添加.这包括字节顺序标记,它包含在范围内FE47-FFFD.

咨询一个角色浏览器,这个范围包括一大堆随机的东西,开始之间WHITE SESAME DOTPRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET,包括一些"小标点",花式阿拉伯语,BOM出现在这里,半宽和全宽亚洲字符,最后包括REPLACEMENT CHARACTER通常用来表示破碎的文字渲染.

当然这是一种错误.他们认为有必要排除"芝麻点",无论那些是什么,但字节顺序标记又称弃用的零宽度非破坏空间是公平的游戏?当还有另一个零宽度不间断空间又名字连接器,它在C++ 11中也被认为是可接受的标识符?

似乎对标准的最优雅的解释是,将任何形式的Unicode定义为源字符集,是在可选BOM之后开始该文件.但是,用户也可以通过使用BOM作为标识符来合法地开始文件.这只是丑陋的.

我错过了什么,或者这是一个毫无疑问的缺陷?

c++ unicode byte-order-mark c++11

11
推荐指数
1
解决办法
584
查看次数

十六进制值0x00是加载XML文档的无效字符

我最近有一个不会加载的XML.错误消息是

十六进制值0x00是无效字符

通过LinqPad中的最少代码(C#语句)收到:

var xmlDocument = new XmlDocument();
xmlDocument.Load(@"C:\Users\Thomas\AppData\Local\Temp\tmp485D.tmp");
Run Code Online (Sandbox Code Playgroud)

我使用十六进制编辑器浏览了XML但找不到0x00字符.我把XML最小化了

<?xml version="1.0" encoding="UTF-8"?>
<x>
</x>
Run Code Online (Sandbox Code Playgroud)

在我的十六进制编辑器中,它显示为

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  FF FE 3C 00 3F 00 78 00 6D 00 6C 00 20 00 76 00  ÿþ<.?.x.m.l. .v.
00000010  65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 22 00  e.r.s.i.o.n.=.".
00000020  31 00 2E 00 30 00 22 00 20 …
Run Code Online (Sandbox Code Playgroud)

c# xml byte-order-mark

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

dos2unix:在第1703行找到的二进制符号0x04

我通过选择Export-> Related files 从OECD http://stats.oecd.org/Index.aspx?datasetcode=CRS1("CRS 2013 data.txt')下载文件.我想在Ubuntu(14.04 LTS)中使用此文件.

当我跑:

dos2unix CRS\ 2013\ data.txt
Run Code Online (Sandbox Code Playgroud)

我知道了:

dos2unix: Binary symbol 0x0004 found at line 1703
dos2unix: Skipping binary file CRS 2013 data.txt
Run Code Online (Sandbox Code Playgroud)

我检查文件的编码:

file --mime-encoding CRS\ 2013\ data.txt
Run Code Online (Sandbox Code Playgroud)

并看到:

CRS 2013 data.txt: utf-16le
Run Code Online (Sandbox Code Playgroud)

我做:

iconv -l | grep utf-16le
Run Code Online (Sandbox Code Playgroud)

这不会返回任何东西,所以我这样做:

iconv -l | grep UTF-16LE
Run Code Online (Sandbox Code Playgroud)

返回:

UTF-16LE//
Run Code Online (Sandbox Code Playgroud)

然后我跑:

iconv --verbose -f UTF-16LE -t UTF-8 CRS\ 2013\ data.txt -o crs_2013_data_temp.txt
Run Code Online (Sandbox Code Playgroud)

并检查:

file --mime-encoding crs_2013_data_temp.txt
Run Code Online (Sandbox Code Playgroud)

并看到:

crs_2013_data_temp.txt: utf-8
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

dos2unix crs_2013_data_temp.txt
Run Code Online (Sandbox Code Playgroud)

得到:

dos2unix: Binary …
Run Code Online (Sandbox Code Playgroud)

byte-order-mark dos2unix utf-16

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

Visual Studio 2015 - 高级保存选项缺少编码类型

我遇到了我的Windows 10机器x64的2013年和2015年安装在我的Visual Studio的一个非常奇怪的现象:他们不显示了完整的"高级保存选项..."编码类型列表中,已减少到只有3可能的选择(见截图#1).

截图1: Windows 10上的VS2015/VS2013  - 仅提供3种编码类型

清单期待包含编码类型的主要是更广泛的选择,包括UTF-8无BOM其中我使用了很多:他们都可以在VS我在我的笔记本电脑安装(8.1的Windows 64时,Visual Studio 2013 ,见截图#2).

截图2: Windows 8.1上的VS2013  - 所有可用的编码类型

任何人都知道为什么会这样,以及如何解决这个问题?提前致谢.

编辑:所有这些VS版本都是Community Edition,包括笔记本电脑上的版本(它不应该与构建相关 - CE总是有这些enctypes).第一个屏幕截图的路径被我抓了,它在GUI中显示得很好.

byte-order-mark visual-studio-2013 visual-studio-2015

11
推荐指数
1
解决办法
1248
查看次数

enconding问题

我正在使用PHP开发一个网站,这些奇怪的字符""出现在我的页面中,就在它的顶部.我的代码是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><?php echo '';?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Run Code Online (Sandbox Code Playgroud)

但是当我在浏览器中看到源代码时,它会显示:

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Run Code Online (Sandbox Code Playgroud)

我不知道是否与我正在使用的编码有任何关系,因为当我将charset更改为charset=utf-8它消失但我必须使用iso-8859-1

html php byte-order-mark utf-8 iso-8859-1

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

在R中将UTF-8 BOM导出到.csv

我正在从MySQL数据库通过RJDBC读取文件,它正确显示R中的所有字母(例如,נווהשאנן).但是,即使使用write.csv和fileEncoding ="UTF-8"导出它,输出看起来像 <U+0436>.<U+043A>. <U+041B><U+043E><U+0437><U+0435><U+043D><U+0435><U+0446>(在这种情况下,这不是上面的字符串而是保加利亚字符串),用于保加利亚语,希伯来语,中文等等.其他特殊字符,如ã,ç等工作正常.

我怀疑这是因为UTF-8 BOM,但我没有在网上找到解决方案

我的操作系统是德语Windows7.

编辑:我试过了

con<-file("file.csv",encoding="UTF-8")
write.csv(x,con,row.names=FALSE)
Run Code Online (Sandbox Code Playgroud)

和(afaik)等价物write.csv(x, file="file.csv",fileEncoding="UTF-8",row.names=FALSE).

byte-order-mark r utf-8 export-to-csv

9
推荐指数
2
解决办法
5941
查看次数

没有BOM的UTF-8 html显示奇怪的字符

我有一些HTML包含一些forign字符(€,ó,á).HTML文档保存为UTF-8,无BOM.当我在浏览器中查看页面时,forign字符似乎被替换为陌生字符组合(â€,ó,Ã).只有当我将HTML文档保存为带有BOM的UTF-8时,才能正确显示字符.

我真的不想在我的文件中包含BOM,但有人知道它为什么会这样做吗?以及解决它的方法?(除了包括BOM)

html byte-order-mark utf-8

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

Git忽略BOM(防止git diff显示字节顺序标记更改)

我想git diff不显示BOM更改.
这些变化通<feff>常表现为差异:

-<feff>/*^M
+/*^M
Run Code Online (Sandbox Code Playgroud)

我怎样才能git diff这样做?
最好使用命令行参数.

git --ignore-all-space(又名git -w)没有做到这一点.如果重要的话,我在Mac OS X上.

git byte-order-mark git-diff

9
推荐指数
1
解决办法
3499
查看次数

在浏览器下载中保留 UTF-8 BOM

我有一个 JAX-RS REST-Service,它生成一个 CSV 文件并将其流回浏览器。一切都设置为 UTF-8,所以我通过浏览器下载的文件也是一个有效的 UTF-8 文件(没有 BOM),它在 Notepad++、Sublime 等中向我显示有效、可读的 UTF-8 变音等。

虽然在 Excel 中打开这样的文件会导致不可读的变音等,因为 Excel 显然试图用另一个字符集打开它(CP-1252,我猜,但这并不重要)。

通过 Notepad++ 使用 BOM 保存文件并在 Excel 中重新打开它效果很好。似乎 BOM 的检测是 Excel 用来检测 UTF-8 的唯一方法。无论如何 - 我认为添加 BOM 可以帮助......

做过某事。结果一样。过了一会儿,我发现在某些情况下 BOM 会被删除:如果我在 BOM 之前添加任何字符,我可以在我的十六进制编辑器中看到 BOM。删除该字符后,BOM 将不再存在。

当我继续通过 cURL 下载文件时,我真的很惊讶。BOM 就在那里!在那之前,我认为这可能与我的应用程序、内容类型、编码、HTTP 标头等有关 - 但它们似乎都很好。

现在,经过数小时的尝试不同的东西,关于如何告诉浏览器保留 BOM 的任何想法?我可以设置任何 HTTP 标头吗?由于 Chrome、Internet Explorer、Edge、Firefox 都删除了 BOM,这对我来说听起来有点像浏览器约定......

非常感谢您的大力帮助!

编辑:感谢 sideshowbarker 的回答,我找到了一种解决方法,即在内容之前添加两个 BOM,因此在浏览器删除第一个 BOM 后,将剩余一个 BOM。

browser curl byte-order-mark jax-rs utf-8

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