标签: byte-order-mark

Ascii文件中的Python BOM错误

我有一个奇怪的,恼人的Python 2.6问题.我正在尝试在我的嵌入式Linux ARM板上运行此文件(和另一个). http://svn.tuxisalive.com/software_suite_v3/smart-core/smart-server/trunk/TDSService.py

我收到此错误:

文件"tuxhttpserver.py",第1行语法错误:编码问题:带BOM

我知道错误是关于BOM字节等等.但是,没有BOM字节,它是简单的Ascii.我用Hexeditor检查,linux File命令说它的Ascii.

我在这里吓坏了...代码在我的Sheevaplug(也是一个基于ARM的系统)上运行良好.

python encoding ascii byte-order-mark

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

如何在不使用BOM且以非ASCII字符开头的情况下识别针对文件的不同编码?

我在尝试识别没有BOM的文件的编码时遇到了问题,特别是当文件以非ascii字符开头时.

我找到了关于如何识别文件编码的两个主题,

目前,我创建了一个类来识别文件的不同编码(例如UTF-8,UTF-16,UTF-32,UTF-16无BOM等),如下所示,

public class UnicodeReader extends Reader {
private static final int BOM_SIZE = 4;
private final InputStreamReader reader;

/**
 * Construct UnicodeReader
 * @param in Input stream.
 * @param defaultEncoding Default encoding to be used if BOM is not found,
 * or <code>null</code> to use system default encoding.
 * @throws IOException If an I/O error occurs.
 */
public UnicodeReader(InputStream in, String defaultEncoding) throws IOException {
    byte bom[] = new byte[BOM_SIZE];
    String encoding;
    int unread;
    PushbackInputStream pushbackStream …
Run Code Online (Sandbox Code Playgroud)

java unicode encoding byte-order-mark non-ascii-characters

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

为什么VIM会忽略我的文件BOM?

我需要一个文件,我想确保用utf8编码.

所以,我创建了该文件

c:\> gvim umlaute.txt
Run Code Online (Sandbox Code Playgroud)

在VIM我键入Umlaute:

äöü
Run Code Online (Sandbox Code Playgroud)

我检查编码...

:set enc
Run Code Online (Sandbox Code Playgroud)

(VIM回声encoding=latin1)

然后我检查文件编码...

:set fenc
Run Code Online (Sandbox Code Playgroud)

(VIM回声fileencoding=)

然后我写了文件

:w
Run Code Online (Sandbox Code Playgroud)

并检查硬盘上文件的大小:

!dir umlaute.txt
Run Code Online (Sandbox Code Playgroud)

(大小为5个字节)当然可以预期,文本为3个字节,\ x0a\x0d为2个字节.

好的,我现在将编码设置为

:set enc=utf8
Run Code Online (Sandbox Code Playgroud)

缓冲区很奇怪

<e4><f6><fc>
Run Code Online (Sandbox Code Playgroud)

我想这是我之前输入的ascii字符的十六进制表示.所以我重写了它们

äöü
Run Code Online (Sandbox Code Playgroud)

写作,检查大小:

:w
:$ dir umlaute.txt
Run Code Online (Sandbox Code Playgroud)

这一次,它是8个字节.我想这对于每个字符加上\ x0d\x0a是有意义的2个字节.

好的,所以我想确保下次打开文件时它会用encodiung = utf8打开.

:setb
:w

:$ dir umlaute.txt
Run Code Online (Sandbox Code Playgroud)

11个字节.这当然是BOM(ef bb bf)的8(先前)字节+ 3字节.

所以我

:quit
Run Code Online (Sandbox Code Playgroud)

vim并再次打开文件

并检查,如果设置了编码:

:set enc
Run Code Online (Sandbox Code Playgroud)

但VIM坚持认为encoding=latin1.

那么,为什么呢.我原以为BOM会告诉VIM这是一个UTF8文件.

vim byte-order-mark utf-8

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

如何从PHP字符串中删除“�”?

可能重复:
如何在字符串中替换�

我正在从来自数据库的XML表中读取数据。在原始输出中,我遇到了这个字符“�”,它是UTF-8字符串,表示“?”。搜索“?”时,使用str_replace进行简单的搜索并删除并不能解决问题。或“�”。还有其他方法可以从字符串中删除此字符吗?

更新:

作为参考,该函数正在为我清理字符串。

    function db_utf8_convert($str)
{
    $convmap = array(0x80, 0x10ffff, 0, 0xffffff);
    return preg_replace('/\x{EF}\x{BF}\x{BD}/u', '', mb_encode_numericentity($str, $convmap, "UTF-8"));
}
Run Code Online (Sandbox Code Playgroud)

php string byte-order-mark utf-8

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

无 BOM 的 UTF8 编码 - PowerShell

我有一个 bat 文件,我在其中对一些 CSV 文件进行编码。问题是,一旦编码完成,文件的开头就会有一个字符(我猜是 BOM 字节)。这个字符让我很困扰,因为编码后,我使用这个文件来生成数据库。这是编码行(在bat文件内):

powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\pass.csv
Run Code Online (Sandbox Code Playgroud)

有没有办法对没有 BOM 的文件进行编码(如果这是问题)?

谢谢!

powershell encoding cmd byte-order-mark utf-8

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

处理 R 中的字节顺序标记 (BOM)

有时,.CSV 文件的开头会出现字节顺序标记 (BOM)。当您使用记事本或 Excel 打开文件时,该符号不可见,但是,当您使用各种方法在 R 中读取文件时,您会在第一列的名称中看到不同的符号。这是一个例子

\n\n

开头带有 BOM 的示例 csv 文件。

\n\n
ID,title,clean_title,clean_title_id\n1,0 - 0,,0\n2,"""0 - 1,000,000""",,0\n27448,"20yr. rope walker\nigger",Rope Walker Igger,1832700817\n
Run Code Online (Sandbox Code Playgroud)\n\n

通读read.csv基础 R 包

\n\n
(x1 = read.csv("file1.csv",stringsAsFactors = FALSE))\n#   \xc3\xaf..ID                raw_title        semi_clean semi_clean_id\n# 1     1                    0 - 0                               0\n# 2     2          "0 - 1,000,000"                               0\n# 3 27448 20yr. rope walker\\nigger Rope Walker Igger    1832700817\n
Run Code Online (Sandbox Code Playgroud)\n\n

通读freaddata.table包中的内容

\n\n
(x2 = data.table::fread("file1.csv"))\n#    \xc3\xaf\xc2\xbb\xc2\xbfID                raw_title        semi_clean semi_clean_id\n# 1:     1                    0 - 0                               0\n# 2:     2 …
Run Code Online (Sandbox Code Playgroud)

byte-order-mark r data.table read.csv readr

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

Java Spring 返回使用 BOM 编码的 UTF-8 CSV 文件

显然,要让 excel 很好地打开 CSV 文件,它的开头应该有字节顺序标记。CSV 的下载是通过写入HttpServletResponse控制器中的输出流来实现的,因为数据是在请求期间生成的。当我尝试写入 BOM 字节时出现异常 - java.io.CharConversionException: Not an ISO 8859-1 character: [](即使我指定的编码是UTF-8)。


控制器的方法有问题

@RequestMapping("/monthly/list")
public List<MonthlyDetailsItem> queryDetailsItems(
        MonthlyDetailsItemQuery query,
        @RequestParam(value = "format", required = false) String format,
        @RequestParam(value = "attachment", required = false, defaultValue="false") Boolean attachment,
        HttpServletResponse response) throws Exception 
{   
    // load item list
    List<MonthlyDetailsItem> list = detailsSvc.queryMonthlyDetailsForList(query);
    // adjust format
    format = format != null ? format.toLowerCase() : "json";
    if (!Arrays.asList("json", "csv").contains(format)) format = "json";

    // modify common response …
Run Code Online (Sandbox Code Playgroud)

java spring byte-order-mark utf-8

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

VS Code 不断使用 BOM 以 UTF-8 格式保存我的文件

VS Code 不断使用 BOM 以 UTF-8 格式保存我的文件。我的files.encoding设置未utf8在我的用户设置或工作区设置中设置(默认为)。files.autoGuessEncoding设置也未设置(默认为false)。在我对文件进行任何编辑后,在 Notepad++ 中将其更改为不带 BOM 后,它会自动将其与 BOM 一起保存。我能做些什么来解决这个问题?

byte-order-mark utf-8 character-encoding visual-studio-code vscode-settings

5
推荐指数
0
解决办法
5314
查看次数

使用 Export-CSV 将“SEP=,”添加到 CSV 的开头

有没有一种干净的方法可以附加SEP=,到由 创建的 CSV 文件的开头Export-CSV

\n\n

注意:这是一个 XY 问题;有关我的根本问题的信息,请参阅下面为什么需要这个。我要求提供 SEP 部分,因为这似乎是最好的解决方案,因为我需要继续使用 UTF8 CSV,并且不希望用户必须更改其工作方式以避免出现问题。

\n\n

创建后修改文件

\n\n

简单的选择是这样的;然而感觉很混乱(即我们释放文件上的锁然后必须返回并更新它)。

\n\n
function Repair-Csv {\n    [CmdletBinding()]\n    Param (\n        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]\n        [string]$Path\n    )\n    Begin {\n        $sep = "SEP=,`r`n" \n    }\n    Process {\n        $sep + (Get-Content -Path $Path -Raw) | Set-Content -Path $Path\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

代理功能解决方案尝试

\n\n

我尝试创建一个代理函数(下面的代码),但发现包装的Export-CSV命令不会将其输出附加到我的调整文件中,而是读取我已经编写的内容并尝试用作SEP=列标题;所以我最终没有数据(除非我导出的对象的属性之一恰好被称为SEP=.

\n\n
# $MetaData = New-Object System.Management.Automation.CommandMetaData (Get-Command \'Export-CSV\')\n# [System.Management.Automation.ProxyCommand]::Create($MetaData)\nfunction Export-CsvAdvanced {\n    [CmdletBinding(DefaultParameterSetName=\'Delimiter\', SupportsShouldProcess=$true, …
Run Code Online (Sandbox Code Playgroud)

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

5
推荐指数
0
解决办法
1479
查看次数

使用League / CSV导出CSV不会编码变音符号

我正在使用League / CSV软件包在Laravel 5.7中导出模型:

public function export(Request $request)
{
    $people = Person::all();
    $location = 'export.csv';
    $csv = Writer::createFromPath($location, 'w');
    $csv->setOutputBOM(Writer::BOM_UTF8);
    $csv->setDelimiter(';');
    foreach ($people as $person) {
        $csv->insertOne($this->serializePerson($person));
    }
    return response($location);
}

protected function serializePerson($person)
{
    return [
        $person->name,
        $person->age,
    ];
}
Run Code Online (Sandbox Code Playgroud)

这样就export.csv可以确定文件了,但是所有变音符的显示方式都不正确(例如??)。我本以为设置BOM可以解决此问题。有没有人有办法解决吗?

编辑:问题不是出口,是Mac Excel错误地显示了变音符号。请参阅下面的答案。

php csv byte-order-mark utf-8 laravel

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