* Henry S. Thompson wrote:
I'm curious to know what level you're invoking the parser at. As
implied by my previous post about the Python 'requests' package, it
handles application/json resources by stripping any initial BOM it
finds -- you can try this with
import requests
r=requests.get("http://www.ltg.ed.ac.uk/ov-test/b16le.json")
r.json()
The Perl code was
perl -MJSON -MEncode -e
"my $s = encode_utf8(chr 0xFEFF) . '[]'; JSON->new->decode($s)"
The Python code was
import json
json.loads(u"\uFEFF[]".encode('utf-8'))
The Go code was
package main
import "encoding/json"
import "fmt"
func main() {
r := "\uFEFF[]"
var f interface{}
err := json.Unmarshal([]byte(r), &f)
fmt.Println(err)
}
In other words, always passing a UTF-8 encoded byte string to the byte
string parsing part of the JSON implementation. RFC 4627 is the only
specification for the application/json on-the-wire format and it does
not mention anything about Unicode signatures. Looking for certain byte
sequences at the beginning and treating them as a Unicode signature is
the same as looking for `/* ... */` and treating it as a comment.
--
Björn Höhrmann · mailto:bjoern(_at_)hoehrmann(_dot_)de ·
http://bjoern.hoehrmann.de
Am Badedeich 7 · Telefon: +49(0)160/4415681 · http://www.bjoernsworld.de
25899 Dagebüll · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/