2013-08-11 8 views
8

Mi chiedevo se tutta la lingua tratta lo stesso insieme di caratteri come i caratteri dello spazio bianco o c'è qualche variazione.Tutti i caratteri dello spazio bianco? È indipendente dalla lingua?

Qualcuno può fornire l'elenco completo dei caratteri di spazio bianco che separano quello che può essere inserito dalla tastiera? Se è diverso, la differenza e il motivo sarebbero più appropriati. Qualsiasi lingua è utile se non si mette in evidenza Whitespace o le sue varianti (se presenti). Io certamente non voglio un elenco completo per la lingua come Whitespace :)

+2

Bene, [questa lingua] (http://en.wikipedia.org/wiki/Whitespace_ (programming_language)) ha sicuramente diversi caratteri di spazi bianchi da altre lingue. –

+1

'U + 1361' è" WORDPACE ETHIOPIC ", che sembra un carattere spaziale specifico della lingua. –

risposta

15

se un carattere particolare, è classificato come un carattere di spaziatura o non dovrebbe dipendere dal set di caratteri in uso. Detto questo, non è impossibile che un linguaggio di programmazione possa fare la propria definizione di ciò che costituisce lo spazio bianco.

La maggior parte delle lingue moderne utilizzano il set di caratteri Unicode, che fa hanno una definizione per caratteri separatori spazio. Qualsiasi carattere nella categoria Zs è un separatore di spazio .

You can see the complete list here. Inoltre è possibile grep per ;Zs; nel Unicode Character Database ufficiale per vedere quei personaggi. Si noti che il numero di caratteri in questa categoria potrebbe aumentare con la nascita di nuove versioni Unicode, quindi non dirò quanti di questi caratteri esistano, né ancora tentativo per elencarli.

Oltre al Zs Unicode categoria, Unicode definisce anche character properties. Tra le proprietà definite da Unicode è una proprietà spazio bianco. A partire da Unicode 7.0, i caratteri con questa proprietà includono tutti i caratteri con categoria Zs più alcuni caratteri di controllo (inclusi U + 0009, U + 000A, U + 000B, U + 000C, U + 000D e U + 0085). Puoi trovare tutti i caratteri con la proprietà dello spazio bianco at Unicode.org here.

Ora molte lingue, anche moderne, hanno simboli speciali per espressioni regolari come \s o [:space:] ma attenzione, questi si riferiscono solo a determinati caratteri dal set ASCII; generalmente sono limitate a

  • SPACE (codepoint 32, U + 0020)
  • TAB (codepoint 9, U + 0009)
  • linea (punto di codice 10, U + 000A)
  • LINE TABULAZIONE (codepoint 11, U + 000B)
  • FORM FEED (codepoint 12, U + 000C)
  • Carriage Return (punto di codice 13, U + 000D)

Ora questa lista è interessante perché contiene non solo i separatori di spazio (Zs), ma anche la categoria "Control, Other" (Cc). Questo è ciò che un linguaggio di programmazione generalmente indica quando usa il termine "spazio bianco".

Quindi probabilmente il modo migliore per rispondere alla tua domanda per una "lista completa" di caratteri di spazi vuoti è dire "dipende da cosa intendi". Se intendi "spazi bianchi classici" probabilmente sono i sei caratteri sopra elencati. Se vuoi qualcosa di più "moderno", allora è l'unione di quei sei con tutti i personaggi della categoria Unicode Zs.Inoltre, potresti dover guardare anche all'interno di altri blocchi (ad esempio, U + 1361 come menzionato in un commento alla tua domanda di Jerry Coffin). Dipende anche da ciò che intendi per fare con questi spazi.

Ora un'ultima cosa: Unicode non ha ancora ogni personaggio nel mondo; continua a crescere. È possibile che un giorno vengano aggiunti nuovi personaggi nello spazio. Per ora, la categoria Zs + i classici sono la soluzione migliore.

+0

Grazie per il chiarimento. – sakibmoon

+0

Ray, la tua risposta è stata così approfondita che voglio solo postare questo commento, così probabilmente ti verrà notificato questo commento che ti mancano 3 caratteri, che puoi trovare nella mia risposta separata. Ma poiché la tua risposta è stata così approfondita, volevo solo darti un 'urlo' amichevole in modo da poter aggiornare la tua risposta come la scegli tu. Saluti! Post scriptum Grazie per le tue fantastiche informazioni! –

+0

Grazie, @ShawnKovac, aggiornato. La risposta originale riguardava solo i 17 caratteri con categoria Z, quindi l'ho espansa per includere quelli con la proprietà carattere _whitespace_, che ha aggiunto otto (non solo tre). Hai ragione che a partire da Unicode 7.0 ci sono 25 caratteri con quella proprietà. –

6

La risposta di Ray fornisce ottime informazioni, ma sfortunatamente mancano 3 caratteri bianchi. :(

Aggiornamento: Ray ha aggiornato la sua già buona risposta fino ad ora anche più completa e completa.Non sapevo che fosse così complicato. :) Per una risposta 'semplice', fornisco il seguente. Ma è molto utile capire le complicazioni extra che spiega molto bene.

Al momento non ci sono 25 Unicode caratteri di spazio bianco con la seguente esadecimale 'punti di codice':

9, A, B, C, D, 20, 85, A0, 
1680, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
2007, 2008, 2009, 200A, 2028, 2029, 202F, 205F, 
3000 

corrispondenti valori decimali sono:

9, 10, 11, 12, 13, 32, 133, 160, 
5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 
8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 
12288 

Il mio riferimento è il sito Unicode ufficiale stessa, dove i cercato "spazio bianco". Quindi, come dice l'espressione, l'ho preso "dalla bocca del cavallo". Se vai a http://unicode.org/charts/uca/ ottieni 2 frame con un frame di navigazione a sinistra, in cui puoi fare clic sul terzo link sotto il link "Guida", che è il link "Spazio bianco". Sfortunatamente, la cornice visualizzata non è quella che chiamerei molto "user-friendly". Ma il frame che viene visualizzato fornisce un elenco non elaborato di all valori esadecimali di ogni carattere spazio vuoto Unicode. Credo che la pagina sia la risposta più "ufficiale" che si possa ottenere.

+0

133 o 0x85 non è uno spazio bianco è il carattere di controllo . Questo apre un'altra lattina di worm, controlla i caratteri che non controllano nulla e sono resi come spazi. – Lothar

-3

Se siete alla ricerca di un metodo efficace, ho utilizzare il seguente codice:

(c <= 32 && c >= 0) || c == 127; 

0 a 31 sono i caratteri di controllo, 32 è il carattere spazio e 127 è il carattere ESC. Questo funziona per tutti i set di caratteri che conosco, incluso UTF-8.

+3

FYI: questo test NON funziona in qualsiasi capacità esatta, anche per ASCII e UTF-8. Ma ciò che fa è effettivamente testare solo i caratteri ASCII * più popolari *. Anche charatter 127 NON è il carattere ESC. Char 27 è Fuga. Char 127 è il carattere Del e NON è un carattere di spaziatura. Questo * è * un test accurato invece per i caratteri ASCII 'non stampabili'. Questi hanno somiglianze con i caratteri degli spazi bianchi, ma sono ancora diversi. Mi pare di paragonarli a essere un po 'cugini l'uno dell'altro in un paragone di analogia. Ma uno può chiedere uno spazio bianco, ma questo significa. –