Prima di tutto, il concetto di larghezza completa (全 角) e metà larghezza (半角) esiste solo per due tipi di caratteri in giapponese:
- Caratteri romani (ad es. Latino)
- Katakana caratteri
Esiste un concetto simile per il coreano Hangul, ma non per il giapponese Hiragana, nè per Kanji.
Per Katakana, i caratteri a mezza larghezza hanno i loro punti di codice Unicode e vengono visualizzati a metà delle dimensioni dei caratteri a larghezza intera, sebbene in caso contrario abbiano una forma identica. Esempio:
spessore pieno "ka": カ
Simbolo alfabeto "ka": カ
caratteri combinati (cioè con diacritics come ガ) non esiste in versioni Mezza-; devono essere codificati come due caratteri separati: カ + ゙, che è probabilmente la ragione per cui nel tuo compito il doppio dei caratteri è consentito per la larghezza di metà. (Si noti che queste combinazioni di due punti di codice sono considerate come personaggi che combinano e di solito reso come uno.)
Per romana (latina) caratteri, i soliti caratteri ASCII sono chiamati metà larghezza, ma la gamma di codice giapponese di Unicode (così come i tradizionali set di caratteri specifici per il Giappone) forniscono un intervallo di codice separato per le versioni a larghezza piena. Esempio:
spessore pieno: L
Mezza-larghezza: non esistono L
versioni Tutta Larghezza per i caratteri non-ASCII Latin-derivati (come ad esempio dieresi tedesche), né per le versioni accentate. Esse, tuttavia, esistono per i numeri e alcuni caratteri di punteggiatura.
Ancora una volta, Hiragana e Kanji non hanno versioni della larghezza di metà.
Per verificare se un carattere è a larghezza intera oa metà larghezza, confrontare il punto di codice con l'intervallo di codice rilevante.Gli intervalli sono i seguenti:
Simbolo alfabeto Katakana: 0xff61
attraverso 0xff9f
spessore pieno Katakana: 0x30a0
attraverso 0x30ff
Mezza-larghezza romana: 0x21
attraverso 0x7e
(questo è ASCII)
spessore pieno romana: 0xff01
attraverso 0xff60
Hiragana: 0x3041
attraverso 0x309f
Kanji (ovvero il gruppo unificato-ideogrammi): 0x4e00
attraverso 0x9fcc
Ecco un semplice programma in Ruby che esegue i controlli su una base per-carattere:
# -*- coding: utf-8 -*-
def is_halfwidth_katakana(c)
return (c.ord >= 0xff61 and c.ord <= 0xff9f)
end
def is_fullwidth_katakana(c)
return (c.ord >= 0x30a0 and c.ord <= 0x30ff)
end
def is_halfwidth_roman(c)
return (c.ord >= 0x21 and c.ord <= 0x7e)
end
def is_fullwidth_roman(c)
return (c.ord >= 0xff01 and c.ord <= 0xff60)
end
def is_hiragana(c)
return (c.ord >= 0x3041 and c.ord <= 0x309f)
end
def is_kanji(c)
return (c.ord >= 0x4e00 and c.ord <= 0x9fcc)
end
text = "Hello World、こんにちは、半角カタカナ、全角カタカナ、fullwidth 0-9\n"
text.split("").each do |c|
if is_halfwidth_katakana(c)
type = "halfwidth katakana"
elsif is_fullwidth_katakana(c)
type = "fullwidth katakana"
elsif is_halfwidth_roman(c)
type = "halfwidth roman"
elsif is_fullwidth_roman(c)
type = "fullwidth roman"
elsif is_hiragana(c)
type = "hiragana"
elsif is_kanji(c)
type = "kanji"
end
printf("%c (%x) %s\n",c,c.ord,type)
end
Ulteriori note
Il codice va sopra sono il funzionario Intervalli Unicode per ciascun tipo di carattere (vedere Unicode Fullwidth forms e Unicode Hiragana). Questi includono alcune versioni a larghezza piena/mezza larghezza di caratteri che sono forme vecchie/tradizionali o caratteri speciali di punteggiatura. Se desideri solo caratteri comunemente usati nei moduli web (ad esempio perché le persone inseriscano i loro nomi), potresti voler limitare un po 'gli intervalli.
Raccomandazione: se si tratta di un modulo Web in cui le persone possono inserire il proprio nome, è consigliabile eseguire un po 'più di semplice controllo di metà larghezza o larghezza intera. È estremamente comune nei siti Web giapponesi e nei moduli di registrazione, in particolare con le banche, per richiedere che le persone inseriscano il loro nome in pura larghezza di mezzo (tipicamente per il latino) o pura larghezza intera (tipicamente per Katakana). Sfortunatamente, ciò rende l'inserimento dei dati molto sconveniente. Quando il metodo di input giapponese è abilitato, i caratteri latini spesso escono in versioni a larghezza intera e il modulo Web rifiuterà quindi i dati perché non è pura larghezza di metà. Invece di rifiutare, dovrebbe convertire automaticamente a qualsiasi forma di cui ha bisogno. Puoi facilmente implementarlo traducendo da un intervallo di codici all'altro (semplicemente aggiungendo la costante pertinente) e rendendo la vita delle persone molto più semplice.
Non so quali siano i caratteri giapponesi a metà larghezza e a larghezza intera. È qualcosa che devo capire per rispondere alla domanda? –
@garbagecollection Molto probabilmente sì. [Questa risposta sembra correlata] (http://stackoverflow.com/a/4684278/477878) anche se è una risposta sulla larghezza del carattere per la regolazione. –
sì, il font mi sembra che la larghezza di metà è il rapporto 2: 1 mentre la larghezza totale è il rapporto 1: 1, controllo la dimensione dei byte ma entrambi sono 3 – valrecx