Это - мой фрагмент кода для этого сценария:
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
Убедитесь, что у вас установлена последняя версия 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: ô
И содержимое файла:
Это также может объяснить, почему Леннарт Регебро не смог воспроизвести его.
Попробуйте следующее:
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, но либо это значение по умолчанию, либо что-то еще происходит здесь, поскольку он работает вот так.
Если я правильно понял вашу проблему, та же проблема должна возникнуть в вашей системе, если вы просто сделаете следующее:
str(u'ô')
Думаю, автоматическое кодирование в кодировку локали в Unix не будет работать, пока вы не включите с учетом локали if
в функции setencoding
в вашем модуле site
через locale
. Этот файл обычно находится в /usr/lib/python2.x
, в любом случае его стоит проверить. AFAIK, кодирование с учетом локали setencoding
отключено по умолчанию (это верно для моей установки Python 2.6).
Возможные варианты:
site.