Como isso é possível não é um caractere ascii, é codificado com 3 bytes, 0xE881B5. O que eu esperava é obter u0081 porque ascii caracteres são codificados com um único byte. Se eu ler usando a codificação binária imprime verdadeiro, o que eu espero com a codificação ascii. Este resultado é uma característica intencional Se ascii codificação retorna o mesmo resultado como utf8 codificação então por que é ascii um possível parâmetro Este é o conteúdo (aberto com programa HxD): A resposta rápida é que o nó não faz qualquer mágica ao converter de um buffer para Uma string, se é ascii ou utf8. Sua string utf8 é totalmente inválida ascii. Então eu acho que idealmente iria lançar um erro, mas obviamente não. Eu não esperaria o u0081 desde que é inválido ascii. Você pode ver na fonte do Nó. O código para converter de um buffer para uma seqüência de caracteres são o. Funções de fatia. As funções ascii e utf8 são idênticas, levando ao comportamento que você está vendo. Esses construtores não fazer nada extravagante, eles apenas tomar uma seqüência de bytes e convertê-lo em uma Cadeia de caracteres JS, assumindo que é válido nessa codificação. As diferenças entre as duas codificações vêm das funções AsciiWrite e Utf8Write nesse arquivo, que tratam as coisas de maneira diferente. Como você viu a partir de seus testes, ajustes binários melhor com o que você está procurando. Binário passa por cada byte individual em um buffer e retorna uma seqüência onde cada ponto de código tem esse valor de byte. Sem saber exatamente qual idioma que é, eu estou adivinhando japonês (me corrija se eu estiver errado). No entanto, Shift JIS tem a infeliz propriedade de que muitas vezes quebra qualquer analisador (software que lê o texto codificado) que não é projetado especificamente Para lidar com isso. Por exemplo, um método de pesquisa de texto pode obter falso hits se ele não foi projetado para Shift JIS. EUC, por outro lado, é tratado muito melhor por analisadores que foram escritos para 7 bits ASCII (e, portanto, EUC codificações são utilizadas no UNIX, onde grande parte do arquivo de manipulação de código foi historicamente escrito apenas para codificações Inglês). Mas a EUC não é compatível com o JIS X 0201, a primeira codificação japonesa principal. Outras complicações surgem porque os padrões originais de e-mail da Internet só suportam protocolos de transferência de 7 bits. Assim, a codificação JIS foi desenvolvida para enviar e receber e-mails. Em padrões de conjunto de caracteres, como JIS, nem todos os caracteres necessários são incluídos, então gaiji (caracteres externos) às vezes são usados para complementar o conjunto de caracteres. Gaiji pode vir na forma de pacotes de fontes externas, onde os caracteres normais foram substituídos por novos caracteres, ou os novos caracteres foram adicionados às posições de caracteres não utilizados. No entanto, gaiji não são práticos em ambientes Internet, uma vez que o conjunto de fontes deve ser transferido com texto para usar o gaiji. Como resultado, esses caracteres são escritos com caracteres semelhantes ou mais simples no local, ou o texto pode precisar ser escrito usando um conjunto de caracteres maior (como Unicode) que oferece suporte ao caractere necessário. Gostaria de tentar com alguns personagens mais exóticos, como o seu teste irá falhar. Respondeu Dec 14 12 at 13:39 Isso doesn39t resposta porque nó decodifica o arquivo como utf8 enquanto explicitamente disse para decodificá-lo como ascii. O comportamento esperado é um erro, como 0xe8 está fora gama ascii. Ndash Deestan Dec 14 12 at 13:43 Deestan Onde na sua pergunta original você disse algo sobre utf8 A menos que eu estou faltando alguma coisa e binário utf8 ndash Woot4Moo Dec 14 12 at 13:45
No comments:
Post a Comment