Vad betyder ?
Det ställer samma fråga; den extra bredden är typografisk.
? tillhör en klass med full bredd som används i kinesisk, japansk och koreansk text, medan ? är den smala ASCII-formen. Skillnaden gäller avstånd, inte hur brådskande frågan är.
Full bredd är ett layoutmål, inte ett exakt mått: teckensnittet och textmotorn bestämmer den synliga formen och dess bredd. Tecknet behöver alltså inte se dubbelt så brett ut. Unicode-normalisering för kompatibilitet kan omvandla ? till ?, så att frågefunktionen finns kvar men breddskillnaden försvinner.
Varifrån kommer formen med full bredd?
Formen med full bredd hör till datorernas tid med blandade teckenbredder.
I äldre östasiatiska teckenkodningar tog ideogram ofta två byte i anspråk, medan ASCII använde ett. System behövde parade former med full och halv bredd för att flytta text mellan dessa layouter utan att ändra äldre data.
Datorhistorien är skild från skiljetecknens historia i japansk skrift. Äldre japanska texter använde få eller inga skiljetecken; västerländska tecken dök senare upp i läroböcker och modern skönlitteratur och blev vanligare. Japansk grammatik kunde redan markera frågor med slutpartikeln か eller andra ord. Skiljetecknet markerar meningen, det skapar inte frågan.
Neutralt skiljetecken. I CJK-text signalerar formen med full bredd en avståndskonvention, inte större brådska.
Ett bredare tecken gör inte frågan mer eftertrycklig.
Blanda inte ihop med
1Vanliga frågor
2Varför blev mitt ? till ?
Det kan hända när programvara använder kompatibilitetsnormalisering eller omvandlar mellan full och halv bredd. Meningen är fortfarande en fråga, men teckenformerna är inte längre identiska.
Varför ser ? inte dubbelt så brett ut?
Det behöver inte göra det. Full bredd beskriver breddbeteende och kompatibilitet i östasiatisk text; teckensnittet och layoutmotorn bestämmer den synliga bredden. Även om det ser smalt ut är ? fortfarande tecknet med full bredd.
Så skriver du ?
?\FF1FKoder och kodningKodpunkter: 1
En synlig symbol kan innehålla flera kodpunkter. JS .length räknar UTF-16-enheter; UTF-8 räknar byte.

