Безопасный символ ASCII для замены пробелов перед сохранением - PullRequest
2 голосов
/ 14 июня 2010

Мой код передает большой пакет текстовых данных в устаревшую библиотеку, которая отвечает за ее хранение.Тем не менее, он имеет тенденцию удалять конечные пробелы.Это проблема, когда я читаю данные обратно.Поскольку я не могу изменить устаревший код, я подумал о замене всех пробелов каким-нибудь необычным символом ASCII.Когда я читаю текст обратно, я могу заменить его обратно.

  1. Это плохая идея, учитывая, что я не могу коснуться устаревшего кода хранилища?
  2. Какой символ я могу использовать какзамена?Я рассматривал некоторые символы выше 180.

В данных будут только пробелы - без табуляции или новых строк.Данные буквенно-цифровые, со специальными символами.

Ответы [ 7 ]

6 голосов
/ 14 июня 2010

Если все, что вам нужно защищать, это завершающий пробел (встроенный пробел в порядке), тогда как насчет «$» или аналогичного в конце каждого текста.

Тогда вы можете просто удалить его при чтении обратно.

У вас могут быть проблемы, если в прежней системе уже есть данные, но вы можете прочитать все существующие данные, найти символ (или строку), который никогда не используется в конце любых существующих данных, и использовать чтобы отмечать новые строки (и защищать пробелы в них).

4 голосов
/ 14 июня 2010

Как насчет использования Base64 кодирования для всего текста?Таким образом, он также может обрабатывать наборы символов не ASCII, такие как UTF-8.Недостатком является то, что вы потеряете часть пространства (если у устаревшей системы есть ограничения на длину текста).

2 голосов
/ 14 июня 2010

Вы можете использовать символ Тильда (~).Это не происходит в основном в текстах.Вы можете использовать '\', если хотите избежать этого.

1 голос
/ 14 июня 2010

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

Что вы должны сделать, если найдете схему кодирования, которая кодирует символ пробела. Например, вы можете использовать кодировку / декодирование URL, так как это будет кодировать пробелы.

1 голос
/ 14 июня 2010

Поскольку вы не можете изменить устаревший код, это по сути черный ящик (даже если вы каким-то образом знаете, что происходит интеллектуально). Поэтому единственный правильный ответ: попробуйте, какой персонаж работает, и используйте его. (И если никакой символ не работает, проблема невозможна. Вот почему устаревший код - отстой.)

1 голос
/ 14 июня 2010

Как насчет управляющего символа (ниже 32, кроме CR / LF / TAB / NULL)?

0 голосов
/ 14 июня 2010

Ну, вы могли бы использовать ASCII 254 для замены пробела в лагированной системе.

...