标签: byte-order-mark

使用 Perl 从字符串中删除 UTF-16 BOM

我正在寻找正确的语法来从 UTF-16 文本文件中删除 BOM,我已经成功地为 UTF-8 做到了这一点。请参阅下面的我尝试过的语法:

$readline =~ s/^\N{ZERO WIDTH NO-BREAK SPACE}//;
$readline =~ s/^\N{BYTE ORDER MARK}//;
$readline =~ s/^\N{BOM}//;
$readline =~ s/^\x{FEFF}//;
$readline =~ s/^\0x{FEFF}//;
$readline =~ s/^\x{FE}\x{FF}//;
$readline =~ s/^\xFE\xFF//;
$readline =~ s/^\0xFE\0xFF//;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这些是重复的,但我正在尝试任何我能找到的东西。为了打开文件,我使用了编码功能。任何帮助将不胜感激。

unicode perl byte-order-mark utf-16 character-encoding

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

如何在不使用BOM的情况下识别不同的编码?

我有一个文件监视器,它正在从使用utf-16LE编码的不断增长的文件中获取内容.写入它的第一位数据有BOM可用 - 我用它来识别UTF-8的编码(我的文件的MOST编码在其中).我抓住了BOM并重新编码为UTF-8,所以我的解析器并没有吓坏.问题是,由于它是一个不断增长的文件,并不是每一位数据都有BOM.

这是我的问题 - 没有将BOM字节添加到我拥有的每组数据(因为我没有对源的控制)我可以只查找UTF-16\000中固有的空字节,然后使用那作为我的标识符而不是BOM?这会让我头疼吗?

我的架构涉及一个ruby Web应用程序,当我用java编写的解析器拾取它时,将收到的数据记录到一个临时文件中.

现在写我的识别/重新编码代码如下所示:

  // guess encoding if utf-16 then
  // convert to UTF-8 first
  try {
    FileInputStream fis = new FileInputStream(args[args.length-1]);
    byte[] contents = new byte[fis.available()];
    fis.read(contents, 0, contents.length);

    if ( (contents[0] == (byte)0xFF) && (contents[1] == (byte)0xFE) ) {
      String asString = new String(contents, "UTF-16");
      byte[] newBytes = asString.getBytes("UTF8");
      FileOutputStream fos = new FileOutputStream(args[args.length-1]);
      fos.write(newBytes);
      fos.close();
    }

    fis.close();
    } catch(Exception e) {
      e.printStackTrace();
  }
Run Code Online (Sandbox Code Playgroud)

UPDATE

我想支持诸如欧元,em-dashes和其他角色之类的东西.我修改了上面的代码看起来像这样,它似乎传递了我对这些字符的所有测试:

  // guess encoding if utf-16 …
Run Code Online (Sandbox Code Playgroud)

java byte-order-mark utf-8 utf-16

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

由Wordpress自动生成的PHP页面中的BOM

我管理两个不同的博客.它们都是wordpress 2.8.6(因此它们具有完全相同的源代码,插件除外)但它们位于两个不同的托管平台(hostmonster.com和aruba.it).为了解释我的问题,我已经使用SmartSniff转发了与每个站点的会话.

这是来自hostmonster的转储:

GET /blog/paolo/ HTTP/1.1
Host: www.e-venturi.com
Accept-Encoding: identity
Accept-Language: en-us
Accept: text/html, text/plain, text/xml, image/gif, image/x-xbitmap, image/x-icon,image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0;)


HTTP/1.1 200 OK
Date: Sat, 28 Nov 2009 23:47:38 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635
X-Powered-By: PHP/5.2.11
X-Pingback: http://www.e-venturi.com/blog/paolo/xmlrpc.php
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

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

现在来自阿鲁巴:

GET /blog/ HTTP/1.1
Host: www.cubanite.net
Accept-Encoding: identity
Accept-Language: en-us …
Run Code Online (Sandbox Code Playgroud)

php apache wordpress byte-order-mark

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

文件包含的意外输出

我一直在使用PHP自定义CMS,直到最近才遇到任何问题.测试时,我注意到字符串已经开始出现在索引页面的顶部.在整个代码中使用一些die语句进行测试,似乎输出是在一个文件包含之间.

档案A.

<?php
if (!defined('IN_CMS'))
{
    exit;
}

require(INCLUDE_PATH . '/pages/homepage/main.php');
?>
Run Code Online (Sandbox Code Playgroud)

文件B(包含文件)

<?php
if (!defined('IN_CMS'))
{
    exit;
}

$db->sql_query("SELECT * FROM `" . DB_PREFIX . "categories` active = 1");
$cats = $db->sql_results();
$categories = array();

foreach($cats as $cat)
{
    $cat_info = array(
        'name' => $cat['name'],
        'description' => $cat['description'],
        'image' => $setting['site_url'] . '/thumbnails/' . $cat['image'],
    );

    $categories[] = $cat_info;
}

include theme('index');
?>
Run Code Online (Sandbox Code Playgroud)

我无法理解输出的来源,但它似乎介于两个文件之间.我已经ob_start()在文件A中的包含行之前添加,并且ob_end_clean()在包含文件的最开头添加并且输出没有显示,但是在两个文件中的任何地方都没有杂散输出.

php byte-order-mark utf-8 include

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

为什么网站在IE怪癖模式下运行?

我有一个网站:http://www.sucramma.dk 当我在FF,Chrome或Safari时,网站显示应该,但在IE中网站是左对齐的,并且正在运行是怪癖模式.为什么?doctype已设置好!

html internet-explorer byte-order-mark browser-bugs

0
推荐指数
2
解决办法
5425
查看次数

BOM是否用于2字节Unicode文本文件?

我知道BOM用于UTF-8文件,但是每个字符都是2字节的文本文件呢,我也应该添加字节顺序标记吗?

unicode byte-order-mark

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

为什么字符串有时写在一个方向,有时在另一个方向?

这是代码:

byte bytes[] = {0x2e, 0x20, 0x65, 0x00, 0x74, 0x00, 0x61, 0x00, 0x64, 0x00, 0x70, 0x00, 0x75, 0x00, 0x67, 0x00};
std::wstring s;
s.resize( 8 );
memcpy( &s[0], bytes, 16 );

_tprintf( _T("key: %s\n"), s.c_str());
MessageBox ( 0, s.c_str(), _T(""), 0 );
Run Code Online (Sandbox Code Playgroud)

消息框中的结果gupdate位于控制台中?etadpug.

我认为这是编码.0x2e20或0x202e是什么意思吗?

c++ encoding byte-order-mark wstring

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

当我连接文件时,为什么字节顺序标记出现在哪里?

我有一个包含XML文件的文件夹,我需要将它们合并到一个文件中.当我尝试这个:

var allFiles = Directory.GetFiles(path, "*.xml");
String result = Path.Combine( path, "merged.xml" );
using( var stream = new FileStream( result, FileMode.Create, FileAccess.Write ) ) {
    foreach( var file in allFiles ) {
        var fileContents = File.ReadAllBytes( file );
        stream.Write( fileContents , 0, fileContents.Length );
    }
    stream.Close();
}
Run Code Online (Sandbox Code Playgroud)

我看到0xEF 0xBB 0xBF(字节顺序标记)序列出现在任何两个文件的内容之间的结果文件中,但不出现在文件的开头而不是文件的末尾.

如果我StreamWriter改用:

var allFiles = Directory.GetFiles(path, "*.xml");
String result = Path.Combine( path, "merged.xml" );
using( var stream = new FileStream( result, FileMode.Create, FileAccess.Write ) ) {
    using( …
Run Code Online (Sandbox Code Playgroud)

.net c# byte-order-mark

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

如何读取包含 BOM 和 CRLF 的文本文件?

我有一堆文本文件,其中包含字节顺序标记 (BOM),并且它们还具有 CRLF (\r\n) 结尾来标记行尾。例如,这是八进制转储片段:

$ od -bc P21_T_3-28-2022.txt
0000000   357 273 277 163 164 141 147 145 040 061 015 012 120 154 141 171
         357 273 277   s   t   a   g   e       1  \r  \n   P   l   a   y
0000020   151 156 147 040 164 150 145 163 145 040 164 167 157 040 147 141
           i   n   g       t   h   e   s   e       t   w   o       g   a
0000040   155 145 163 054 040 162 145 155 …
Run Code Online (Sandbox Code Playgroud)

python io byte-order-mark file

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