Как знать кодирование файла в Python? [дубликат]

Прямым подходом было бы следующее представление:


    

Header

С помощью этого компонента:

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

     private String page;

     @PostConstruct
     public void init() {
         page = "include1"; //  Default include.
     }

     // +getter+setter.
 }

В этом примере фактические шаблоны включают include1.xhtml, include2.xhtml и include3.xhtml в папке /WEB-INF/includes (папка и местоположение полностью бесплатны по вашему выбору; файлы только что помещены в /WEB-INF, чтобы запретил прямой доступ , угадывая URL-адрес в браузере адресная строка).

Этот подход работает во всех версиях MyFaces, но требует минимум Mojarra 2.3.0. Если вы используете версию Mojarra старше 2.3.0, тогда все это не удастся, когда страница в свою очередь содержит . Любой postback не будет работать, потому что он полностью не видит состояние представления. Вы можете решить эту проблему, обновив до минимума Mojarra 2.3.0 или со скриптом, найденным в этом ответе h: commandButton / h: commandLink не работает при первом щелчке, работает только при втором щелчке , или если вы 'уже используете библиотеку утилиты JSF OmniFaces , используйте ее скрипт FixViewState . Или, если вы уже используете PrimeFaces и используете исключительно ajax, то он уже прозрачно принимается во внимание.

Кроме того, убедитесь, что вы используете минимальный Mojarra 2.1.18, поскольку более старые версии будут неспособность сохранить видимый объект в видимой области, что приводит к неправильному использованию во время обратной передачи. Если вы не можете обновить, вам нужно будет вернуться к приведенному ниже (относительно неуклюжему) подходу условного отображения представления вместо условного построения представления:

...

    
        
    
    
        
    
    
        
    

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

Что касается позиционирования элементов, это просто вопрос применения правый CSS. Это выходит за рамки JSF :) По крайней мере, отображает

, поэтому это должно быть достаточно хорошим.

Последнее, но не менее важное: этот подход SPA (Single Page Application) - это не SEO дружелюбный. Все страницы не индексируются поисковыми роботами и не могут быть заклассифицированы конечными пользователями. Возможно, вам придется столкнуться с историей HTML5 на клиенте и предоставить резервную копию на стороне сервера. Более того, в случае страниц с формами тот же экземпляр bean-объекта с расширенным представлением будет повторно использоваться на всех страницах, что приведет к неинтуитивной видимости при переходе на ранее посещаемую страницу. Вместо этого я предлагаю использовать шаблонный подход, как указано во второй части этого ответа: Как включить другой XHTML в XHTML с помощью JSF 2.0 Facelets? См. Также Как перемещаться в JSF? Как сделать URL-адрес текущей страницы (а не предыдущей) .

23
задан luc 29 January 2010 в 12:54
поделиться

3 ответа

Не вводите в заблуждение с помощью обозначения. Скорее раздражает то, что С использует прототип f (void) для обозначения « f ожидает отсутствие параметров», а не « f ожидает единственный параметр типа void ». Обозначение f () было сохранено для обозначения «количество параметров, которое ожидает f , неизвестно, поэтому вы можете называть его с любым количеством параметров, которые вам нравятся, и удачи вам». До ANSI Standard C (он же C89) не было такой вещи, как прототип функции, и вам нужен был инструмент, такой как lint , чтобы защитить вас от даже самых обыденных видов ошибок с параметрами, таких как передача неверного количества параметров или передача параметра с дико несовместимым типом.

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

-121--2478568-

Я согласен, что значение Null < DateTime > является лучшим выбором при отсутствии других соображений.

Однако необходимо рассмотреть другие системы, с которыми необходимо взаимодействовать.

Например,

  • если вы предоставляете .NET DateTime COM-клиентам, вы не сможете использовать значение NULL < DateTime >.

  • Если значение сохраняется в базе данных SQL Server, помните, что SQL Server не может хранить DateTime.MinValue как DateTime.

Другой пункт, который следует учитывать, заключается в том, что значение Nullable может создать некоторую сложность для вызывающих абонентов API: возможно, им потребуется рассмотреть, как должен обрабатываться случай NULL. В некоторых случаях может быть проще использовать значение по умолчанию для нулевого варианта. Например, рассмотрим класс, который предоставляет свойство «ExpiryDate», где необходимо значение, указывающее, что срок действия предмета никогда не истекает.

Один из подходов заключается в использовании значения Nullable < DateTime > со значением null, представляющим «never expires». Альтернативный подход заключается в использовании стандартного DateTime с DateTime.MaxValue , представляющим «никогда не истекает».

В этом примере тест «is expired» проще для стандартного DateTime:

if (item.ExpiryDate <= DateTime.Today) ...

, чем для Nullable < DateTime > :

if (item.ExpiryDate.HasValue && item.ExpiryDate <= DateTime.Today) ...
-121--2959462-

К сожалению, нет «правильного» способа определения кодировки файла путем просмотра самого файла. Это универсальная проблема, не ограничивающаяся python или какой-либо конкретной файловой системой.

При чтении XML-файла первая строка файла может дать подсказку о кодировке.

В противном случае вам придется использовать некоторый подход на основе эвристики, такой как chardet (одно из решений, приведенных в других ответах), который пытается угадать кодировку, проверяя данные в файле в формате необработанных байтов. Если вы находитесь в Windows, я полагаю, что Windows API также предоставляет методы, чтобы попытаться и угадать кодировку на основе данных в файле.

21
ответ дан 29 November 2019 в 02:11
поделиться

Вы можете использовать спецификацию ( http://en.wikipedia.org/wiki/Byte_order_mark ) для определения кодировки или попробовать эту библиотеку:

https: / /github.com/chardet/chardet

9
ответ дан Ioannis Filippidis 29 November 2019 в 02:11
поделиться

Ну, если нам не разрешено изменять декларацию переменной, то Const_Cast приходит на спасение. Если нет, сделать его смешным, это решение.

-121--4180361-

Существует Dammit Unicode из , красивый суп , который использует Chardet , но добавляет пару дополнительных функций.

Он пытается прочитать кодировку изнутри XML или HTML-файлов. Затем он пытается искать BOM или что-то вроде этого в начале файла. Если это не может сделать это, он использует Chardet .

3
ответ дан 29 November 2019 в 02:11
поделиться
Другие вопросы по тегам:

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