* 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@xxxxxxxxxxxx · 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/