Python UnicodeDecodeError - Является мной, недоразумение кодирует?

Решение с меньшим количеством XAML и более C #

Если вы определяете ListView в XAML:

<ListView x:Name="listView"/>

Затем вы можете добавлять столбцы и заполнять их в C #:

public Window()
{
    // Initialize
    this.InitializeComponent();

    // Add columns
    var gridView = new GridView();
    this.listView.View = gridView;
    gridView.Columns.Add(new GridViewColumn { 
        Header = "Id", DisplayMemberBinding = new Binding("Id") });
    gridView.Columns.Add(new GridViewColumn { 
        Header = "Name", DisplayMemberBinding = new Binding("Name") });

    // Populate list
    this.listView.Items.Add(new MyItem { Id = 1, Name = "David" });
}

См. определение MyItem ниже.

Решение с большим количеством XAML и менее C #

Однако его легче определить столбцы в XAML (внутри определения ListView):

<ListView x:Name="listView">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Id" DisplayMemberBinding="{Binding Id}"/>
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
        </GridView>
    </ListView.View>
</ListView>

А затем просто заполните список в C #:

public Window()
{
    // Initialize
    this.InitializeComponent();

    // Populate list
    this.listView.Items.Add(new MyItem { Id = 1, Name = "David" });
}

См. определение MyItem ]

MyItem Определение

MyItem определяется следующим образом:

public class MyItem
{
    public int Id { get; set; }

    public string Name { get; set; }
}
54
задан Greg 15 December 2008 в 15:57
поделиться

3 ответа

†¦ существует причина, их называют "кодировкой" †¦

Немного преамбулы: думайте о unicode как о норме или идеальном состоянии. Unicode является просто таблицей символов. в „–65 является латинским капиталом A. в „–937 является греческой прописной омегой. Просто это.

Для компьютера, чтобы сохранить и - или управлять Unicode, это имеет к , кодируют это в байты. Самым простым кодирование из Unicode является UCS-4; каждый символ занимает 4 байта, и все ~1000000 символов доступны. 4 байта содержат количество символа в таблицах Unicode как 4-байтовое целое число. Другое очень полезное кодирование является UTF-8, который может закодировать любой символ Unicode одним - четырьмя байтами. Но также существует некоторая ограниченная кодировка, как "latin1", которые включают очень ограниченный диапазон символов, главным образом используемых странами Запада. Такой кодировка использование только один байт за символ.

В основном, Unicode может быть , закодировал многой кодировкой и закодировал строки, может быть , декодировал к Unicode. Вещь, Unicode прибыл довольно поздно, таким образом, все мы, которые росли с помощью 8-разрядного набор символов , узнали слишком поздно, что все это время работали с , закодировал строки. Кодирование могло быть ISO8859-1, или окнами CP437 или CP850, или, или, или, в зависимости от нашего системного значения по умолчанию.

Поэтому, в Вашем исходном коде, при вводе строки, "добавляют “Monitoring“ для списка" (и я думаю, что Вы хотели строку, "добавляют “Monitoring” для списка", отмечают вторая кавычка), Вы на самом деле уже используете строку , закодировал согласно кодовой странице Вашей системы по умолчанию (байтом \x93, я предполагаю, что Вы используете кодовую страницу 1252 Windows, “Western”). Если Вы хотите получить Unicode от этого, Вам нужно к [1 110], декодируют строка от кодирования "cp1252".

Так, то, что Вы означали делать, было:

"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")

неудачно, что Python 2.x включает .encode метод для строк также; это - функция удобства для "специальной" кодировки, как "zip" или "rot13" или "base64", которые не имеют никакого отношения к Unicode.

Так или иначе, все необходимо помнить за Ваш туда и сюда, преобразования Unicode:

  • строка Unicode добирается , закодировал к строке Python 2.x (на самом деле, последовательность байтов)
  • , строка Python 2.x добирается , декодировал к строке Unicode

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

я не очень ясен, я являюсь сонным, но я верная надежда, которой я помогаю.

пз юмористическое примечание стороны: у майя не было Unicode; древние римляне, древние греки, древние египтяне сделали не также. Они все имели свою собственную "кодировку" и имели мало ни к какому уважению к другим культурам. Все эти цивилизации, которые крошат для чистки. Думайте об этом люди! Сделайте свои приложения осведомленными о Unicode, на благо человечества.:)

PS2 не портите предыдущее сообщение путем высказывания, "Но Chinese†¦". Если Вы чувствуете себя склонными, или обязанный сделать так, тем не менее, задерживают его путем размышления, что Unicode, BMP заполняется главным образом китайскими идеограммами, следовательно китайский язык, является основанием Unicode. Я могу продолжить изобретать возмутительную ложь, пока люди разрабатывают осведомленные о Unicode приложения. За Ваше здоровье!

211
ответ дан ICR 7 November 2019 в 17:35
поделиться

закодируйте доступно строкам unicode, но строка, которую Вы имеете, там не делает кажется unicode (попытайтесь u'add \x93Monitoring\x93 перечислить')

>>> u'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
'add \x93Monitoring\x93 to list '
4
ответ дан rob 7 November 2019 в 17:35
поделиться

Это, кажется, работает:

'add \x93Monitoring\x93 to list '.decode('latin-1').encode('latin-1')

Какие-либо проблемы с этим? Интересно, когда 'игнорируют', 'замена' и другой такой кодировать обработку ошибок входят?

-3
ответ дан Greg 7 November 2019 в 17:35
поделиться
Другие вопросы по тегам:

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