LINUX.ORG.RU

[Python][SVN][UTF-8]Can't convert string from 'UTF-8' to native encoding.


0

1

Есть такой вот код на python'е:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pysvn

SVN_REPO_URL = 'http://svn.mydomain.ru/svn/repo'
CHECKOUT_DESTINATION = './'

def get_login(realm, username, may_save):
    return True, 'mylogin', 'mypassword', True

client = pysvn.Client() 
client.callback_get_login = get_login

client.checkout(SVN_REP_OURL, CHECKOUT_DESTINATION)
Попытка выполнения этой программы приводит к тому, что часть репозитария скачивается, но на первом файле с кириллицей в названии останавливается с ошибкой:

pysvn._pysvn_2_6.ClientError: Can't convert string from 'UTF-8' to native encoding:

Что несколько странно, потому что UTF-8 и есть моя native encoding.

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Как с этим бороться?

★★★★★

ичпользовать 3 петон например. имхо одна, и довольно весомая, причина миграции на петон3 это собственно утф8 искаропки

x0r ★★★★★ ()
Ответ на: комментарий от baverman

Ошибка из глубин.

Это ошибка подымается из сишной либы, тут хоть десятый питон используй.

А бороться-то как?

Camel ★★★★★ ()

Как с этим бороться?

Ошибка навряд ли именно в pysvn, поэтому внимательно перелопатить google://svn+native+encoding

Какая задача вообще? Может просто достаточно дергать бинарь? В свое время делал умную обертку над svn, чтобы реализовать некое подобие гитовского стейджа, вполне хватило subprocess и замечательного флага --xml для парсинга результата.

baverman ★★★ ()

Нарыл одну чудесную штуку.

Попробуй сделать

import locale
locale.setlocale(locale.LC_ALL, '')

В начале своего скрипта.

baverman ★★★ ()
Ответ на: комментарий от baverman

/usr/bin/svn

Я пока subprocess.call(«svn ...») делаю. Работает.

Camel ★★★★★ ()
Ответ на: комментарий от baverman

Работает.

Нарыл одну чудесную штуку.

Попробуй сделать

import locale

locale.setlocale(locale.LC_ALL, ")

Хм-м, действительно интересная штука. Попытка поставить ru_RU или ru_RU.UTF-8 приводит к ошибке unsupported locale, а если ничего не писать, как в вашем примере, только две кавычки, то всё работает.

Camel ★★★★★ ()

потому что UTF-8 и есть моя native encoding.

У питона на это счёт своё мнение.

Что пишет

import sys
print sys.getdefaultencoding()

?
anonymous ()
Ответ на: Работает. от Camel

Здесь из чудес только то, что питон не наследует текущую системную локаль, а выставляет ее в None, что многими воспринимается как «С», для меня это было полной неожиданностью.

А locale.setlocale(locale.LC_ALL, ") просто устанавливает её согласно текущей системной, просто запись такая, рецепт из питонячьей документации.

baverman ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.