Развертывание в ответе @ goodside:
В некоторых случаях вам может понадобиться наложить строку с нулями (например, коды fips или другие числовые факторы). В OSX / Linux:
> sprintf("%05s", "104")
[1] "00104"
Но поскольку sprintf()
вызывает команду C sprintf()
ОС, обсуждаемую здесь здесь , в Windows 7 вы получаете другой результат:
> sprintf("%05s", "104")
[1] " 104"
Итак, на машинах Windows работа вокруг:
> sprintf("%05d", as.numeric("104"))
[1] "00104"
Так как я прочитал статью Joel и некоторые другие статьи I18n, я всегда пристально следил к своей кодировке символов; И это на самом деле работает, если Вы последовательно делаете это. Если Вы будете работать в компании, где это стандартно для использования UTF-8, и все знают, что это / делает это, это будет работать.
Здесь некоторые интересные статьи (помимо статьи Joel) на предмете:
Кавычка от первой статьи; Подсказки для использования Unicode:
Я потратил некоторое время, работая с программным обеспечением поисковой системы - Вы не будете верить, сколько веб-сайтов подает содержание с HTTP-заголовками или метатегами, которые лгут о кодировании страниц. Часто, Вы даже получите документ, который содержит и символы ISO 8859 и символы UTF-8.
После того как Вы боролись через несколько из тех видов проблем, Вы начинаете брать надлежащую кодировку символов данных, которые Вы производите действительно серьезно.
Эмпирическое правило: если Вы никогда munge или взгляд в строке и вместо этого не будете рассматривать его строго как блоб данных, то Вы будете очень более обеспечены.
Даже делая что-то столь же простое, как разделение слов или печатающих строчными литерами строк становится жестким, если Вы хотите сделать это "Unicode путь".
И если Вы захотите сделать это "Unicode путь", то Вам будет нужна ужасно хорошая библиотека. Этот материал невероятно сложен.
Платформа.NET использует кодировку по умолчанию Windows для хранения строк, который оказывается UTF-16. Если Вы не укажете кодирование при использовании большей части текста классы ввода-вывода то Вы запишете UTF-8 без BOM и чтения первой проверкой BOM, затем принимающий UTF-8 (я знаю наверняка StreamReader
и StreamWriter
ведите себя этот путь.) Это довольно безопасно для "немых" текстовых редакторов, которые не поймут BOM, но довольно грязный для более умных, которые могли отобразить UTF-8 или ситуацию, где Вы на самом деле пишете символы вне стандартного диапазона ASCII.
Обычно это невидимо, но это может возникнуть интересными способами. Вчера я работал с кем-то, кто использовал сериализацию XML для сериализации объекта к строке с помощью a StringWriter
, и он не мог выяснить, почему кодированием всегда был UTF-16. Так как строка в памяти будет UTF-16, и это осуществляется.NET, это - единственная вещь, которую могла сделать платформа сериализации XML.
Так, когда я пишу что-то, что не является просто одноразовым инструментом, я указываю кодировку UTF-8 с BOM. Технически в.NET Вы всегда будете случайно знающим Unicode, но только если Ваш пользователь знает для обнаружения кодирования UTF-8.
Это заставляет меня кричать немного каждого раза, когда я вижу, что кто-то спрашивает, "Как я получаю байты строки?" и использование предложенного решения Encoding.ASCII.GetBytes()
:(