최근에 저는 파이썬 프로젝트를 상속 받았으며, 저는 제가 고심하고있는 행동을했습니다.파이썬 MySQL UTF-8 인코딩은 실행 순서에 따라 다릅니다.
코드에는 두 개의 섹션이 있으며 파일을 데이터베이스로 가져올 수도 있고 데이터베이스를 출력 파일로 덤프 할 수도 있습니다. 가져 오기는 다음과 같은 :
def importStuff(self):
mysqlimport_args = ['mysqlimport', '--host='+self.host, '--user='+self.username, '--password='+self.password, '--fields-terminated-by=|', '--lines-terminated-by=\n', '--replace', '--local', self.database, filename, '-v']
output = check_output(mysqlimport_args)
덤프는 다음과 같습니다
def getStuff(self):
db = MySQLdb.connect(self.host, self.username, self.password, self.database)
cursor = db.cursor()
sql = 'SELECT somestuff'
cursor.execute(sql)
records = cursor.fetchall()
cursor.close()
db.close()
return records
def toCsv(self, records, csvfile):
f = open(csvfile, 'wb')
writer = csv.writer(f, quoting=csv.QUOTE_ALL)
writer.writerow(['StuffId'])
count = 1
for record in records:
writer.writerow([record[0]])
f.close()
좋아하지 (내가 더 배우고 싶지만 스타일의 의견 환영) 당신이 이제까지 볼 가장 예쁜 파이썬 그러나 그것은 합리적으로 보인다.
그러나 소비자로부터 내 출력이 UTF-8이 아님 (MySQL 테이블은 utf8 인코딩을 사용하고 있습니다) 불만이 있습니다. 나는이 지워지 경우 프로그램이 다음과 같이 실행하면 여기입니다 :
importStuff(...)
getStuff(...)
toCsv(...)
그런 다음 출력 파일이 유효한 UTF-8로 표시되지 않습니다. 내가 다른 파일에 두 개의 서로 다른 단계 다음
importStuff(...)
으로 실행을 중단하면
getStuff(...)
toCsv(...)
갑자기 내 출력은 유효한 UTF-8이 나타납니다. 나는 주변에서 일하는 것을 제외하고는, 나는이 행동을 설명하는 것처럼 보이지 않는다. 누구든지 내가 여기서 잘못하고있는 것에 대해 밝힐 수 있습니까? 또는 진행 상황을 명확히 할 수있는 정보를 더 제공 할 수 있습니까?
감사합니다. 요청에 따라 추가 코드 :
편집 (요인 경우 파이썬 2.7)
. 내 회사로 무고한 등을 보호하기 위해 몇 가지 사소한 조작을했습니다,하지만 여기에 더 많거나 적은있어 :
def main():
dbutil = DbUtil(config.DB_HOST, config.DB_DATABASE, config.DB_USERNAME, config.DB_PASSWORD)
if(args.import):
logger.info('Option: --import')
try:
dbutil.mysqlimport(AcConfig.DB_FUND_TABLE)
except Exception, e:
logger.warn("Error occured at mysqlimport. Error is %s" % (e.message))
if(args.db2csv):
try:
logger.info('Option: --db2csv')
records = dbutil.getStuff()
fileutil.toCsv(records, csvfile)
except Exception, e:
logger.warn("Error Occured at db2csv. Message:%s" %(e.message))
main()
그리고 그것에 대해입니다. 이것은 매우 짧아서이 점을 훨씬 덜 명백하게합니다.
는 는나는 충실하게 표현하는 방법을 잘 모르겠어요 출력은 보인다 :
"F0NR006F8F"
그들은 모두 나에게 더 많거나 적은 ASCII 문자 모양을, 그래서 나는 어떤 문제가 확실하지 않다 그들이 만들 수 있습니다. 어쩌면 나는 잘못된 각도에서 접근하고 있습니다. 현재 파일 인코딩이 무엇인지에 대한 텍스트 편집기의 최선의 추측에 의존하고 있습니다. 어떤 문자가 내 파일 읽기를 멈추게하는지 가장 잘 감지 할 수있는 방법을 모르겠습니다. UTF-8로
두 개의 다른 코드 결과와 두 개의 서로 다른 결과를 생성 할 수 있습니까? – BrenBarn
다른 주름이 있다고 생각합니다. 차이점은 인코딩이 변경되지 않아야한다는 것입니다. –
가능한 복제본 : [Python으로 MySQL에 UTF-8 문자열 작성하기] (http://stackoverflow.com/questions/6202726/writing-utf-8-string-to-mysql-with-python). mysqldb.connect' 호출에서 MySQLdb.connect (use_unicode = True, charset = 'utf8')'인수가 필요하다고 생각합니다 ('use_unicode = True'는 반드시 필요하지 않으며'charset = 'utf8' '). –