标签: byte-order-mark

使用BOM创建UTF-8字符串

我正在使用MD5功能和Base64编码生成用户密码(用于登录所用API的数据层)

我在javascript中完成了代码并且很好,但是在Objective C中,我对BOM很感兴趣

我的代码是:

NSString *str = [[NSString alloc] 
                 initWithFormat:@"%@%@%@%d", 
                    [auth uppercaseString], 
                    [user uppercaseString], 
                    [pwd uppercaseString], 
                    totalDaysSince2000];

NSString *sourceString = [[NSString alloc] initWithFormat:@"%02x%02x%02x%@", 
                          0xEF, 
                          0xBB, 
                          0xBF, 
                          str]; 

NSString *strMd5 = [sourceString MD5]; 

NSData *sourceData = [strMd5 dataUsingEncoding:NSUTF8StringEncoding];  
NSString *base64EncodedString = [[sourceData base64EncodedString] autorelease];  
Run Code Online (Sandbox Code Playgroud)

使用上面的代码我进入内存:

替代文字http://www.balexandre.com/temp/2010-04-06_1523.png

女巫不是我真正需要的......

我甚至尝试过

"%c%c%c%@", (char)239, (char)187, (char)191, str
Run Code Online (Sandbox Code Playgroud)

没有运气......

使用UTF8String不接缝自动附加BOM,如在C#中:-(

如何正确附加BOM?

cocoa-touch byte-order-mark objective-c utf-8

6
推荐指数
2
解决办法
5109
查看次数

为什么org.apache.xerces.parsers.SAXParser不会跳过utf8编码的xml中的BOM?

我有一个带utf8编码的xml.此文件包含BOM作为文件的开头.所以在解析过程中我遇到了org.xml.sax.SAXParseException:prolog中不允许使用内容.我无法从文件中删除这3个字节.我无法将文件加载到内存中并在此处删除它们(文件很大).因此,出于性能原因,我正在使用SAX解析器,如果它们在""标记之前存在,则只想跳过这3个字节.我应该为此继承InputStreamReader吗?

我是java的新手 - 请告诉我正确的方法.

java byte-order-mark xerces

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

是Python 2.7/3中必需的unicode(codecs.BOM_UTF8,"utf8")?

在代码审查中,我遇到了以下代码:

# Python bug that renders the unicode identifier (0xEF 0xBB 0xBF)
# as a character.
# If untreated, it can prevent the page from validating or rendering 
# properly. 
bom = unicode( codecs.BOM_UTF8, "utf8" )
r = r.replace(bom, '')
Run Code Online (Sandbox Code Playgroud)

这是一个将字符串传递给Response对象(Django或Flask)的函数.

这仍然是在Python 2.7或3中需要此修复的错误吗?有些东西告诉我它不是,但我想我会问,因为我不太清楚这个问题.

我不知道它来自哪里,但我在互联网上看过它,有时与Jinja2(我们正在使用)相关联.

谢谢阅读.

python unicode byte-order-mark utf-8

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

Java:UTF-8 和 BOM

在 Java 的错误数据库http://bugs.sun.com/view_bug.do?bug_id=4508058 的一个页面上,它读到 Sun/Oracle 不会解决 Java 不解析 UTF-8 编码字符串的 BOM 的问题。由于此页面上的最新评论可以追溯到 2010 年,我想知道是否有任何更年轻的信息?Java 不能处理 UTF-8 的 BOM 仍然是真的吗?

java byte-order-mark utf-8

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

json_decode 返回 NULL ,UTF-8 BOM

我想使用 json_decode 函数解码 JSON 数据并将其存储到数组中,但它返回 NULL 值。我认为这是因为UTF-8 BOM。有什么解决办法吗?我使用 Windows7 操作系统和 xampp。我将编码设置为

header('Content-type:application/json; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)

JSON数据

{"command":"E101","user_id":"someuser","movie_id":"1","link_id":"2"}
Run Code Online (Sandbox Code Playgroud)

JSON 错误:控制字符错误,可能编码错误

 $json_errors = array(
     JSON_ERROR_NONE => 'No error has occurred',
     JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
     JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
     JSON_ERROR_SYNTAX => 'Syntax error',
    );
    echo 'Last error : ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

如果我解析此 JSON,则不会发生错误

 {"command":"E101","user_id":"someuser","movie_id":"movie_id","link_id":"link_id"}
Run Code Online (Sandbox Code Playgroud)

唯一的区别是我将字符串数据存储到 movie_id 和 link_id 中。为什么会发生这样的事?

JSON数据Bin2Hex()7b22636f6d6d616e64223a2245313031222c226d6f7669655f6964223a226d6f7669655f6964222c226c696e6b5f6964223a226c696e6b5f696 4227d00000000

我通过客户端加密 JSON 数据,在服务器端解密。

这是我的加密函数

    public function ajax_enc($data){

    $vector = "myvector";
    $filter = new Zend_Filter_Encrypt(array('adapter' …
Run Code Online (Sandbox Code Playgroud)

php json byte-order-mark utf-8

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

6
推荐指数
0
解决办法
273
查看次数

设置 nobomb 不删除 vim 中的字节顺序标记

我想\xef\xbb\xbf从我的文件中删除标记 (BOM)。这是一个要输入 python 的文本文件,BOM 标记会导致问题。我尝试过:set nobomb,但那些仍然存在。我该如何解决这个问题以及可能是什么导致了这个问题?

更新: 我的文件是通过组合(串联)许多其他文件(使用 obabel 软件)获得的,每个文件都有 BOM。因此, set nobomb可能仅删除新文件开头的 BOM 标记。在这种情况下,如何删除所有 BOM?

python vim byte-order-mark

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

为什么 UTF-8 BOM 字节 efbbbf 可以替换为 \ufeff?

字节顺序标记(BOM)UTF-8EF BB BF,如在说明中的Unicode 9的部分23.8规范(搜索“签名”)。

Java中的许多解决方案都只是一个简单的一行代码:

 replace("\uFEFF", "")
Run Code Online (Sandbox Code Playgroud)

我不明白这为什么有效。

这是我的测试代码。我在调用后检查二进制文件String#replace,我发现 EF BB BF 已被删除。查看此代码在 IdeOne.com 上实时运行

太神奇了。为什么这样做?

@Test
public void shit() throws Exception{
    byte[] b = new byte[]{-17,-69,-65, 97,97,97};//EF BB BF 61 61 61
    char[] c = new char[10];
    new InputStreamReader(new ByteArrayInputStream(b),"UTF-8").read(c);
    byte[] bytes = new StringBuilder().append(c).toString().replace("\uFEFF", "").getBytes();//
    for(byte bt: bytes){//61 61 61, we can see EF BB BF is indeed removed
        System.out.println(bt);
    }
}
Run Code Online (Sandbox Code Playgroud)

java byte-order-mark

6
推荐指数
2
解决办法
4121
查看次数

StringIO 的 Ruby CSV BOM|UTF-8 编码

红宝石 2.6.3。

我一直在尝试将StringIO对象解析为CSV具有bom|utf-8编码的实例,以便去除 BOM 字符(不需要的)并将内容编码为 UTF-8:

require 'csv'

CSV_READ_OPTIONS = { headers: true, encoding: 'bom|utf-8' }.freeze

content = StringIO.new("\xEF\xBB\xBFid\n123")
first_row = CSV.parse(content, CSV_READ_OPTIONS).first

first_row.headers.first.include?("\xEF\xBB\xBF")     # This returns true
Run Code Online (Sandbox Code Playgroud)

显然bom|utf-8编码不适用于StringIO对象,但我发现它适用于文件,例如:

require 'csv'

CSV_READ_OPTIONS = { headers: true, encoding: 'bom|utf-8' }.freeze

# File content is: "\xEF\xBB\xBFid\n12"
first_row = CSV.read('bom_content.csv', CSV_READ_OPTIONS).first

first_row.headers.first.include?("\xEF\xBB\xBF")     # This returns false
Run Code Online (Sandbox Code Playgroud)

考虑到我需要StringIO直接使用,为什么CSV忽略bom|utf-8编码?有没有办法从StringIO实例中删除 BOM 字符?

谢谢!

ruby csv byte-order-mark utf-8 ruby-csv

6
推荐指数
2
解决办法
1758
查看次数

如何在没有 BOM 的情况下重定向 PowerShell 中的输入?

我正在尝试通过以下方式重定向 PowerShell 中的输入:

Get-Content input.txt | my-program args
Run Code Online (Sandbox Code Playgroud)

问题是管道 UTF-8 文本前面有一个 BOM (0xEFBBBF),我的程序无法正确处理它。

一个最小的工作示例:

// File: Hex.java
import java.io.IOException;

public class Hex {
    public static void main(String[] dummy) {
        int ch;
        try {
            while ((ch = System.in.read()) != -1) {
                System.out.print(String.format("%02X ", ch));
            }
        } catch (IOException e) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 PowerShell 中:

javac Hex.java
Set-Content textfile "ABC" -Encoding Ascii
# Now the content of textfile is 0x41 42 43 0D 0A
Get-Content textfile | java Hex
Run Code Online (Sandbox Code Playgroud)

或者干脆 …

powershell encoding byte-order-mark pipe

6
推荐指数
2
解决办法
750
查看次数