2013-08-05 2 views
5

Ich verwende RandomAccessFile und möchte einen Teil der Datei mit fester Länge reservieren, damit der Benutzer eine Notiz als String eingeben kann. Mein Verständnis von utf-8 ist, dass verschiedene Zeichen unterschiedliche Längen annehmen können, wobei das Maximum bis zu 3 Bytes einnehmen kann.Reservieren eines festen Zeilenbereichs in einer Datei bei Verwendung von utf-8?

Also meine beste benutzerfreundliche Option ist es, dem Benutzer zu sagen, dass sie bis zu 100 Zeichen eingeben können, dann reserviere ich 100 * 3 Bytes Speicherplatz in der Datei für die Zeichenfolge. Wenn sie Zeichen verwenden, die nicht so viel Platz benötigen, um codiert zu werden, dann wird nur ein wenig verschwendeter Platz zur Verfügung stehen.

Ist dies die typische Strategie für dieses Szenario oder gibt es einen besseren Weg dazu?

Dank

Antwort

3

Mein Verständnis von utf-8 ist, dass verschiedene Charaktere unterschiedliche Längen in Anspruch nehmen können, die maximal bis 3 Bytes einnehmen.

Nun, nicht ganz. Das ist der Fall innerhalb der Basic Multilingual Plane (d. H. Bis zu U + FFFF), aber UTF-8 can take up to four bytes für Zeichen bis zu U + 1FFFFF. (Ich glaube nicht, dass irgendetwas darüber hinaus verwendet wird.) An diesem Punkt würden Ihre Java String Objekte mehr als einen char pro Zeichen verwenden.

Sie können relativ einfach die Länge einer bestimmten Zeichenfolge tatsächlich verwendet obwohl - die einfachste Option ist nur, um es zu codieren und sehen, wie viele Bytes Sie erhalten. Ich vermute, dass es benutzerfreundlicher ist, mehr Text in den meisten Fällen zuzulassen, aber nicht "fair" zu sein, genau wie viele Zeichen verwendet werden können (d. H. Mit einigen Zeichen, die mehr Platz brauchen als andere). Es hängt wirklich davon ab, ob Ihre Benutzer bemerken, und ob sie mehr als 100 Zeichen verwenden möchten ...

0

Im aktuellen Unicode-Set kann ein Codepunkt in UTF-8 zwischen einem und vier Oktetts belegen. Ein sichtbares Graphem kann jedoch aus mehr als einem Codepunkt bestehen (weitere Informationen finden Sie unter So is a combining character sequence the same as a “character”?). Daher ist es inhärent schwierig, die programmatische Anzahl für alle Fälle mit der sichtbaren Anzahl zu vergleichen.

Das klingt nach einer Internationalisierung Sorge. Bedenken Sie, dass 100 Zeichen für etwas auf Englisch in Ordnung sein können, aber ein herkömmlicher I18N-Rauchtest soll die Länge von Zeichenfolgen aufblasen, da viele Sprachen ausführlicher sind.

Ob der Ansatz sinnvoll ist, hängt von der Anzahl der zu unterstützenden Sprachen/Schriftsysteme und dem Zweck des Stringfeldes ab.

Verwandte Themen