标签: byte-order-mark

UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0 中的字节 0xff:读取 csv 文件时 python 中的无效起始字节错误

StopWords = pd.read_csv('stopwords.csv',encoding='UTF-8', quotechar='|',names=['StopWords'])
Run Code Online (Sandbox Code Playgroud)

我正在尝试读取包含波斯语文本的 CSV 文件,这是我得到的错误:

UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0 中的字节 0xff:起始字节无效

python byte-order-mark

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

如何告诉ASCIIEncoding类不要解码字节顺序标记

使用.net ASCIIEncoding类将字节数组解码为字符串时,是否需要编写一些代码来检测并删除字节顺序标记,或者是否可以告诉ASCIIEncoding不将字节顺序标记解码为字符串?

这是我的问题,当我这样做时:

string someString = System.Text.ASCIIEncoding.Default.GetString(someByteArray)
Run Code Online (Sandbox Code Playgroud)

someString看起来像这样:

<?xml version="1.0"?>.......
Run Code Online (Sandbox Code Playgroud)

然后我打电话给这个:

XElement.Parse(someString)
Run Code Online (Sandbox Code Playgroud)

由于前三个字节引发异常:EF BB BF - UTF8字节顺序标记.所以我认为,如果我指定UTF8编码,而不是默认,如下所示:

System.Text.ASCIIEncoding.UTF8.GetString(someByteArray)
Run Code Online (Sandbox Code Playgroud)

ASCIIEncoding不会尝试将字节顺序标记解码为字符串.当我将返回的字符串复制到notepad ++中时,我可以看到一个?XML标记前面的字符.所以现在字节顺序标记被解码成单个垃圾字符.在这种情况下,停止解码字节顺序标记的最佳方法是什么?

.net ascii byte-order-mark utf-8

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

什么编码用于跨平台开发(PC,Mac,Linux)?

我们主要在Windows环境中开发我们的PHP应用程序,并将我们的文本源文件存储在PC/ANSI中.

但是现在,开发人员加入了使用Mac平台的我们,我们遇到了在他的机器上创建"补丁"的问题.当他做出任何改变并做到:

svn diff > patchfile.patch
Run Code Online (Sandbox Code Playgroud)

他生成一个补丁文件,表明源代码文件的每一行都已被修改(显然不是这种情况).

我尝试将测试ANSI文件保存为:

PC / UTF-8 (using UTFCast Express which I writes the BOM by default)
PC / UTF-8 (using Notepad++ "Encoding > Convert to UTF-8" - which writes the BOM)
Run Code Online (Sandbox Code Playgroud)

以及:

PC / UTF-8 (using Notepad++ "Encoding > Convert to UTF-8 without BOM")
PC / UTF-8 (using Notepad++ "Encoding > Encode in UTF-8 without BOM")
Run Code Online (Sandbox Code Playgroud)

对于所有这些情况,每当他进行更改并执行svn diff> patchfile.patch时,它会输出所有行,就好像所有行都已更改一样!

[我们尝试为最后3个做"svn diff -x -p> patchfile.patch" - 没有区别]

顺便提一下,使用最后两个选项生成的文件在我的PC机器上继续显示为ANSI.两者似乎都没有修改文件,并且从DOS提示符执行'fc'(文件比较)并没有发现任何差异.

我应该使用什么编码进行跨平台开发?

php encoding cross-platform byte-order-mark utf-8

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

UTF-8 多字节 &amp; bom

我读过这个很棒的教程
http://www.joelonsoftware.com/articles/Unicode.html

但我不明白 UTF-8 如何解决高端、低端机器的事情。对于 1byte,它很好。对于多字节,它是如何工作的?

有人能解释得更好吗?

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

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

从 AJAX 发布的字符串中删除 BOM 字符

我的内容包含多个 BOM (EF BB BF) 字符,我想删除它们。字符位于字符串的中间,我想简单地将它们全部删除。

数据来自我从 CKEditor 实例获取的 JavaScript 源。然后我发布变量并将其作为字符串读取到我的后端,BOMS 就在那里。目前,它们按原样保留,但是当解释字符并开始显示中间内容时,这会导致后期处理出错。我怀疑它们来自复制粘贴到我的 CKEditor 中的东西。

我可以逐个字符遍历字符串字符,但我不知道如何与 BOM 进行比较。是否可以比较字符串字节的十六进制值并比较三个字节序列?

.net c# byte-order-mark

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

使用UTF-16编码保存文本文件而不在C#中使用字节顺序标记(BOM)?


我已经阅读了类似的帖子,他们没有回答我的问题.

我找到的类似帖子是: 如何通过文件将参数传递给tortoiseproc.exe?


但是这个问题没有得到解决,并且在没有BOM的情况下使用UTF-16编码创建了文件.

我正在尝试使用tortoisesvn命令自动为我的项目提交

TortoiseProc.exe /command:commit /pathfile:"D:\p3.tmp" /logmsg:"test log message" /deletepathfile
Run Code Online (Sandbox Code Playgroud)

其中"D:\ p3.tmp"文件包含必须提交的文件列表.

该文件采用UTF-16编码,无需BOM.

我用来创建文件的C#代码:

string line = @"D:\SourceCode\ProductProvider.cs";           
    using (var s = File.Create("D:\\p3.tmp"))
    {
     using (var sw = new StreamWriter(s, new UTF32Encoding()))
     {
         sw.WriteLine(line);
     }
    }
Run Code Online (Sandbox Code Playgroud)

c# tortoisesvn byte-order-mark utf-16 endianness

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

是否可以防止将 BOM 添加到输出 UTF-8 文件中?(Visual Studio 2005)

我需要帮助。我正在编写一个程序,它在没有 BOM 的情况下以 UTF-8 编码打开 2 个源文件。第一个包含英文文本和一些其他信息,包括 ID。第二个只包含字符串 ID 和翻译。该程序通过将英语字符从第二个字符替换为俄语翻译来更改第一个文件中的每个字符串,并将这些字符串写入输出文件。似乎一切正常,但目标文件中出现 BOM。我想创建没有 BOM 的文件,比如源代码。我在文本模式下使用 fopen 函数打开文件,使用 ccs=UTF-8 读取带有 fgetws 函数的字符串到 wchar_t 缓冲区,并使用 fputws 函数写入输出文件

c encoding fopen byte-order-mark utf-8

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

BOM字符在Python 3中复制到JSON中

在我的应用程序内部,用户可以上传文件(文本文件),我需要读取它并为另一个API调用构造json对象。

我用打开文件

f = open(file, encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)

得到第一个单词并构造Json对象,...

我的问题是,某些文件(尤其是来自Microsoft环境的文件)在开始时具有BOM对象。问题是我的Json现在里面有这个角色

{
   "word":"\\ufeffMyWord"
}
Run Code Online (Sandbox Code Playgroud)

当然,此后API仍无法使用。

我显然错过了一些事情,因为utf-8是否不应该删除BOM表对象?(因为它不是utf-8-sig)。

如何克服呢?

python byte-order-mark file utf-8 python-3.x

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

C检查x是否在文件的开头时如何跳过BOM

在C数组/字符串中,如果文件有BOM,如何正确检测某些文件是否在文件的开头,有时BOM占用1个字符,有时BOM占用3个字符,其他时候BOM不存在,导致x的实际位置不总是从索引0开始

大部分时间是这个(十六进制)"ef bb bf"例如:

ef bb bf 23 21 2f 62 69 6e 2f 62 61 73 68 0a 61 20 26 26 20 62 0a 67 20 : ...#!/bin/bash.a && b.g 
Run Code Online (Sandbox Code Playgroud)

它会是这样的吗?

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

struct BOM {
    int is_BOM;
    int length;
    int type;
    char * type_as_string;
    char * BOM;
}

int matches(char * BOM_, char * string_, int length_) {
    char * b = BOM_+1;
    for(int i = 0; i < length_; i++) {
        if …
Run Code Online (Sandbox Code Playgroud)

c byte-order-mark

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

是否可以使用重定向运算符将输出重定向到文件而无需在Powershell中编写字节顺序标记?

在将输出流重定向到文件时,有没有办法省略字节顺序标记?例如,如果我想获取XML文件的内容并用新值替换字符串,我需要创建一个新的编码并将新输出写入如下所示的文件,这个文件非常简单:

$newContent = ( Get-Content .\settings.xml ) -replace 'expression', 'newvalue'
$UTF8NoBom = New-Object System.Text.UTF8Encoding( $false )
[System.IO.File]::WriteAllText( '.\settings.xml', $newContent, $UTF8NoBom )
Run Code Online (Sandbox Code Playgroud)

我也试过使用Out-File,但指定UTF8编码仍然包含BOM:

( Get-Content .\settings.xml ) -replace 'expression', 'newvalue' | Out-File -Encoding 'UTF8' .\settings.xml
Run Code Online (Sandbox Code Playgroud)

我想要做的只是重定向到没有BOM的文件:

( Get-Content .\settings.xml ) -replace 'expression, 'newvalue' > settings.xml
Run Code Online (Sandbox Code Playgroud)

问题是添加到输出文件的BOM通常会在从其他应用程序读取这些文件时导致问题(最值得注意的是,如果我修改XML并且它以BOM开头,大多数读取XML的应用程序都会爆炸,Chef Client也是不喜欢JSON属性文件中的BOM.如果我没有编写类似于Write-FileWithoutBom接受管道输入和输出路径的功能,那么在将输出重定向到文件时,我是否可以简单地"关闭"写入BOM?

解决方案不一定必须使用重定向运算符.如果有一个内置的cmdlet,我可以使用它输出到没有BOM的文件,这也是可以接受的.

powershell byte-order-mark file

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