Windows Codepage Interactions со Стандартом имена файлов C/C++?

Мне удалось решить мою проблему. Моя проблема была в другой части моего приложения. По сути, я полагал, что MessageManager не был сериализован, потому что я не мог получить данные, которые я ожидал получить от него. Оказывается, проблема была в методе, который возвращал данные: я использовал ссылку на объект, чтобы определить, какие данные вернуть. Конечно, десериализация создает новые экземпляры, поэтому после воссоздания моих объектов я больше не смог получить доступ к данным, идентифицированным старым экземпляром.

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

Спасибо всем, кто посмотрел на мой вопрос и / или попытался ответить на него.

5
задан Sol 17 February 2009 в 02:32
поделиться

5 ответов

Я не знаю ни о каком портативном способе использовать unicode файлы с помощью системных библиотек по умолчанию. Но существуют некоторые платформы, которые обеспечивают портативные функции, например:

  • для C: бойкие имена файлов использования в UTF-8;
  • для C++: glibmm также использует имена файлов в UTF-8, требует бойкий;
  • для C++: повышение может использовать wstring для имен файлов.

Я - вполне уверенная.NET / моно платформы также содержат портативные функции файловой системы, но я не знаю их.

2
ответ дан 14 December 2019 в 19:28
поделиться

Я почти уверен, что на Linux, строка имени файла является строкой UTF-8 (в файловой системе EXT3, например, единственные запрещенные символы являются наклонной чертой и ПУСТЫМ УКАЗАТЕЛЕМ), сохраненный в нормальном char *. Страница справочника, кажется, не упоминает кодировку символов, которая является тем, что приводит меня полагать, что это - системный стандарт UTF-8. OS X, вероятно, использует то же, так как это прибывает из подобных корней, но я менее уверен в этом.

0
ответ дан 14 December 2019 в 19:28
поделиться

Вам, вероятно, придется установить локаль потока на локаль системного значения по умолчанию. Посмотрите здесь для возможной причины для Ваших проблем: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100887

0
ответ дан 14 December 2019 в 19:28
поделиться

Mac OS X использует Unicode в качестве своей собственной кодировки символов. Основные строковые объекты являются CFString и NSString. Они хранят массив символов как Unicode.

0
ответ дан 14 December 2019 в 19:28
поделиться

Функции как fopen или ofstream:: открытое взятие имя файла как символ *, но это интерпретируется как являющийся на странице системного кода.

Это означает, что это может быть японский символ, представленный как Shift JIS (cp932), или Упрощенный китайский язык (Большой 5/cp936), корейский, арабский, русский язык, Вы называете его (как долго, поскольку это соответствует странице системного кода ОС).

Это также означает, что это может использовать японские имена файлов в японской системе только. Измените страницу системного кода, и приложение "прекращает работать", я подозреваю, что это - то, что происходит здесь (никакие большие изменения в Windows начиная с Победы 2000 в этой области).

Это - то, как Вы изменяете страницу системного кода: http://www.mihai-nita.net/article.php?artID=20050611a

В конечном счете Вы могли бы рассмотреть перемещение в Unicode (и использование _wfopen, wofstream).

3
ответ дан 14 December 2019 в 19:28
поделиться