Java не может открыть File with Surrogate Unicode Values в имени файла?

Только для забавы

Принятие можно использовать селекторы CSS3, можно сделать что-то как

<div class="posts">
<? foreach($posts as $post){?>
    <div>
        <?=$post?>
    </div>
<? }?>
</div>

<style>
    div.posts div:odd{background-color:red;}
</style>

Даже с поддержкой CSS2 и mootools (библиотека JavaScript), можно заменить стилем с этим javascript

<script type="text/javascript">
    // obviously this script line should go in a js file in a onload (or onDomReady) function
    $('div.posts div:odd').setStyle('background-color','red');
</script>

, Если у Вас ничего нет кроме php этим, можно упростить немного Ваш код с помощью массива

<? $isodd=array('','odd');
   $c=0;
   foreach($posts as $post){?>
    <div class="<?=$isodd[$c++%2]?>">
        <?=$post?>
    </div>
<? }?>
12
задан Bear 9 October 2009 в 19:21
поделиться

3 ответа

Если локаль по умолчанию в вашей среде не включает эти символы, вы не удается открыть файл.

См .: File.exists () не работает с символами Юникода в имени

Изменить: Хорошо .. Что вам нужно, так это изменить языковой стандарт системы. Какую бы ОС вы ни использовали.

Правка :

См .: Как я могу открыть файлы, содержащие диакритические знаки в Java?

См .: JFileChooser на Mac не может видеть файлы, названные китайскими символами ?

4
ответ дан 2 December 2019 в 21:03
поделиться

Я подозреваю, что один из Java или Mac использует CESU-8 вместо правильного UTF-8. Java использует «модифицированный UTF-8» (который является небольшим вариантом CESU-8) для различных внутренних целей, но я не знал, что он может использовать его как файловую систему / defaultCharset. К сожалению, у меня нет здесь ни Mac, ни Java для тестирования.

«Изменено» - это модифицированный способ сказать «с серьезными ошибками». Вместо вывода четырехбайтовой последовательности UTF-8 для дополнительных (не BMP) символов, таких как

7
ответ дан 2 December 2019 в 21:03
поделиться

Это оказалось проблемой с Mac JVM (проверено на 1.5 и 1.6). Имена файлов, содержащие дополнительные символы / пары суррогатов, недоступны с помощью класса Java File. В итоге я написал библиотеку JNI с вызовами Carbon для версии проекта для Mac (ick). Я подозреваю, что проблема CESU-8, о которой упоминалось ранее, поскольку вызов JNI для получения символов UTF-8 вернул строку CESU-8. Не похоже, чтобы это действительно можно было обойти.

3
ответ дан 2 December 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: