UTF-8 Во входе Python, как?

Это - мой фрагмент кода для этого сценария:

DECLARE @oldtext    varchar(1000)
DECLARE @newtext    varchar(1000)
DECLARE @textlen    int
DECLARE @ptr        binary(16)
DECLARE @pos        int
DECLARE @id         uniqueidentifier

SET @oldtext = 'oldtext'
SET @newtext = 'newtext'
SET @textlen = LEN(@oldtext)

DECLARE mycursor CURSOR LOCAL FAST_FORWARD
FOR
    SELECT  [UniqueID]
            ,TEXTPTR([Text])
            ,CHARINDEX(@oldtext, [Text]) - 1
    FROM    [dbo].[myTable] 
    WHERE   [Text] LIKE '%' + @oldtext +'%'

OPEN mycursor

FETCH NEXT FROM mycursor into @id, @ptr, @pos

WHILE @@fetch_status = 0
BEGIN   
    UPDATETEXT [dbo].[myTable].Text @ptr @pos @textlen @newtext

    FETCH NEXT FROM mycursor into @id, @ptr, @pos   
END

CLOSE mycursor
DEALLOCATE mycursor
44
задан Vinay Sajip 9 October 2009 в 19:45
поделиться

3 ответа

Убедитесь, что у вас установлена ​​последняя версия Python 2.6 - с момента выхода версии 2.6 были обнаружены и исправлены некоторые ошибки Unicode. Например, в моей системе Ubuntu Jaunty я запустил ваш сценарий, скопированный и вставленный, удалив только префикс '/ home / ted /' из имени файла журнала. Результат (скопирован и вставлен из окна терминала):

vinay@eta-jaunty:~/projects/scratch$ python --version
Python 2.6.2
vinay@eta-jaunty:~/projects/scratch$ python utest.py 
printed unicode object: ô
vinay@eta-jaunty:~/projects/scratch$ cat logfile.txt 
ô
vinay@eta-jaunty:~/projects/scratch$ 

В окне Windows:

C:\temp>python --version
Python 2.6.2

C:\temp>python utest.py
printed unicode object: ô

И содержимое файла:

alt text

Это также может объяснить, почему Леннарт Регебро не смог воспроизвести его.

16
ответ дан 26 November 2019 в 22:18
поделиться

Попробуйте следующее:

import logging

def logging_test():
    log = open("./logfile.txt", "w")
    handler = logging.StreamHandler(log)
    formatter = logging.Formatter("%(message)s")
    handler.setFormatter(formatter)
    root_logger = logging.getLogger()
    root_logger.addHandler(handler)
    root_logger.setLevel(logging.INFO)

    # This is an o with a hat on it.
    byte_string = '\xc3\xb4'
    unicode_string = unicode("\xc3\xb4", "utf-8")

    print "printed unicode object: %s" % unicode_string

    # Explode
    root_logger.info(unicode_string.encode("utf8", "replace"))


if __name__ == "__main__":
    logging_test()

Я ожидал, что мне придется использовать codecs.open, чтобы открыть файл в кодировке utf-8, но либо это значение по умолчанию, либо что-то еще происходит здесь, поскольку он работает вот так.

2
ответ дан 26 November 2019 в 22:18
поделиться

Если я правильно понял вашу проблему, та же проблема должна возникнуть в вашей системе, если вы просто сделаете следующее:

str(u'ô')

Думаю, автоматическое кодирование в кодировку локали в Unix не будет работать, пока вы не включите с учетом локали if в функции setencoding в вашем модуле site через locale . Этот файл обычно находится в /usr/lib/python2.x , в любом случае его стоит проверить. AFAIK, кодирование с учетом локали setencoding отключено по умолчанию (это верно для моей установки Python 2.6).

Возможные варианты:

  • Позвольте системе найти правильный способ кодирования строк Unicode в байты или сделайте это в своем коде (некоторая конфигурация для конкретного сайта site.
1
ответ дан 26 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

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