какие наименее часто используемые символы для веб-пользователей? - PullRequest
1 голос
/ 28 мая 2009

Мне нужно использовать это как разделитель,

кто-нибудь знал об этой статистике?

Ответы [ 7 ]

10 голосов
/ 28 мая 2009

Выберите любой символ, затем выберите механизм для экранирования этого символа, чтобы обработать случай, когда пользователь хочет его напечатать. Например, в файлах с разделителями-запятыми запятая является разделителем:

1,2,fred,john

Если данные не содержат запятую, вы цитируете ее:

1,2,"Bloggs, Fred",john

А если вам нужно использовать цитату:

1,2,"Bloggs, Fred","Jean-Luc \"Make it so\" Picard"
3 голосов
/ 28 мая 2009

Я не думаю, что имеет значение, какой символ вы используете, вы не должны просто надеяться, что никто не введет ваш разделитель. Используйте запятую и обрабатывайте пользователей, добавляя свои запятые.

2 голосов
/ 28 мая 2009

Похоже, что вы пытаетесь преобразовать список строк в одну строку таким образом, чтобы впоследствии вы могли превратить его в список строк.

Есть несколько традиционных подходов к этому, большинство из них уже упоминалось в этой теме:

  • Используйте необычный символ в качестве разделителя и просто не допускайте его ввода, отклоняя ввод, содержащий разделитель, или заменяя разделитель на «?» или же "." или похожие. Для этого я согласен с человеком, который предложил вертикальную черту (|)
    • Преимущество: простота написания кода на разных языках
    • Недостаток: Вы теряете некоторую выразительность и шансы на дальнейшее расширение, исключая возможность ввода, содержащего ваш разделитель.
  • Используйте разделитель и механизм выхода, когда разделитель появляется на входе. На самом деле есть несколько вариантов этого:
    • Метод «просто как код C», в котором вы добавляете escape-символ к каждому вхождению в ваших данных вашего разделителя или вашего escape-символа. Например: строка «Greetings,Hey,Hello\,World,Hello \\ Backslash» содержит четыре элемента, используя , в качестве разделителя и \ в качестве escape-символа. (Последний элемент изначально имеет одну обратную косую черту)
      • На самом деле это королевская боль - правильно кодировать и реализовывать на многих языках
      • Даже после того, как вы его реализуете, он обычно намного медленнее по сравнению с другими методами
    • Метод «похожих параметров URL», в котором ваш escape-механизм заключается в преобразовании разделителя в многосимвольную последовательность, которая не содержит разделитель. Затем вам также необходимо преобразовать первый символ того, во что превращается ваш разделитель, в его собственную последовательность из нескольких символов. Например, если вы решили использовать , в качестве разделителя и решили представить , как «\1» и \ как «\2», вы можете написать последний пример как: «Greetings,Hey,Hello\1World,Hello \2 Backslash »
      • Обычно это не так сложно реализовать. Преимущество состоит в том, что вы можете выполнять «разделение» и «удаление» частей перехода от строки к списку строк в отдельных шагах. Процесс удаления может быть немного сложным, так как вы должны выполнять сканирование каждой строки.
    • Как CSV-файлы, с кавычками вокруг элементов, которые содержат ваш разделитель, и кавычки экранированы в соответствии с каким-то непонятным механизмом. (Например, путем удвоения)
      • Избегайте этого, если только вы не можете просто выбросить его в уже существующую библиотеку.
      • У этого есть все недостатки метода "Like C code", плюс дополнительное запутанное состояние, которое можно испортить при его реализации.
    • Один из вышеуказанных методов, но с многосимвольным разделителем. Это сложнее, чем вы думаете; лишние символы на самом деле значительно усложняют логику того, что именно следует экранировать.
  • Префикс каждого элемента с его длиной, затем включить элемент без изменений
    • Используется HTTP в его "Chunked" кодировке , bencoding (используется битрорент в проводном формате) и в буферах протокола Google .
    • Реализация этого может быть немного хитрой и очень подвержена ошибкам. Я все еще думаю, что его легче реализовать, чем метод «как код C», особенно в языках низкого уровня.
    • Как только вы правильно его реализуете, это обычно намного быстрее, чем другие схемы, даже схема с потерями, которая просто запрещает ввод, содержащий разделитель. (Исключение составляют случаи, когда вы работаете на языке высокого уровня со встроенной подпрограммой «split»)
2 голосов
/ 28 мая 2009

Вы можете добавить к префиксу любые данные, которые у вас есть в сети, по длине ... вот так HTTP-Chunked-кодировка отправляет вещи по сети.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html

1 голос
/ 28 мая 2009

В таких случаях мне нравится использовать вертикальную черту | персонаж.

  • Это легко заметить при просмотре текстового файла.
  • Это ясно отмечает разделение.
  • Это редко используется.
  • И, поскольку она не имеет внутреннего значения в грамматике английского языка, легко либо просто запретить ее, либо слепо заменить на что-то другое (например, тире), если оно появляется в тексте столбца.
1 голос
/ 28 мая 2009

Как насчет использования строки символов в качестве разделителя?

0 голосов
/ 28 мая 2009

Я уверен, что есть тонны странных символов Юникода, которые не очень-то привыкли, но это, вероятно, не то, что вы ищете.

Почему вы хотите что-то «редкое» для разделителя? Как это будет использоваться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...