Sto cercando di risolvere questa domanda di intervista.Implementare una funzione per verificare se un array stringa/byte segue il formato utf-8
Dopo aver dato una chiara definizione del formato UTF-8. es: 1-byte: 0b0xxxxxxx 2 byte: .... Chiede di scrivere una funzione per verificare se l'input è valido UTF-8. L'input sarà array stringa/byte, l'uscita dovrebbe essere sì/no.
Ho due possibili approcci.
Innanzitutto, se l'input è una stringa, poiché UTF-8 è al massimo 4 byte, dopo aver rimosso i primi due caratteri "0b", è possibile utilizzare Integer.parseInt (s) per verificare se il resto del la stringa è compresa tra 0 e 10FFFF. Inoltre, è meglio controllare se la lunghezza della stringa è un multiplo di 8 e se la stringa di input contiene prima tutti gli 0 e gli 1. Quindi dovrò passare attraverso la stringa due volte e la complessità sarà O (n).
In secondo luogo, se l'input è un array di byte (possiamo anche utilizzare questo metodo se l'input è una stringa), controlliamo se ciascun elemento da 1 byte è nell'intervallo corretto. Se l'input è una stringa, prima controlla che la lunghezza della stringa sia un multiplo di 8, quindi verifica che ogni sottostringa di 8 caratteri sia compresa nell'intervallo.
So che esistono soluzioni di coppia su come controllare una stringa utilizzando le librerie Java, ma la mia domanda è come dovrei implementare la funzione in base alla domanda.
Grazie mille.
fa la stringa in realtà contiene "0" e poi "b" poi 8 "1" e "0" s, o l'intervistatore voleva dire che quelli sono i bit in ogni byte? (Il formato UTF-8 indica che si tratta di quest'ultimo) – immibis
Se è una stringa Java, non ha realmente una codifica. Solo le cose da fare. I personaggi sono già decodificati. Java li rappresenta come UTF-16 internamente, quindi saranno sempre compatibili con UTF-8. – Thilo
@ Jean-FrancoisSavard L'avrei pensato, ma "dopo aver rimosso i primi due caratteri 0b possiamo usare Integer.parseInt (s)" ... – immibis