Re: PHP 6: Mysql with iso-8859-1 chars outputting utf-8: "Could not convert binary string to Unicode string"

From: Date: Wed, 02 May 2007 22:32:16 +0000
Subject: Re: PHP 6: Mysql with iso-8859-1 chars outputting utf-8: "Could not convert binary string to Unicode string"
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-254302@lists.php.net to get a copy of this message
You are right, I really don't know Unicode very much! :P What I was trying to understand was, because unicode.runtime_encoding = iso-8859-1, I tought that all internal operations were done in this encoding, and only when outputting (unicode.output_encoding = utf-8) data would be converted to utf-8. So to me, I did a mysql query with latin1, data comes to my variables as iso-8859-1, I use them, and only when I echo'ed them, they would become utf-8, from a iso-8859-1-to-utf-8-like function. The strange thing to me, is the mysql_fetch_assoc function give this error even before I accessed the field values, as I understanded from the above explanation. Did I understood it wrong? Thanks, Rangel ----- Original Message ----- From: "Richard Lynch" <ceo@l-i-e.com> To: "Rangel Reale" <listas@rangelreale.com> Cc: <php-general@lists.php.net> Sent: Wednesday, May 02, 2007 6:53 PM Subject: Re: [PHP] PHP 6: Mysql with iso-8859-1 chars outputting utf-8: "Could not convert binary string to Unicode string"
This is a question from a guy who does NOT really do Unicode very well... If everything else in your entire system is iso-8859-1 (aka Latin1) why are you making your output be utf-8? Seems to me that that is where the conversion is probably taking place... On Sun, April 29, 2007 11:07 am, Rangel Reale wrote:
Hello! I have a MySQL database where all tables are in the latin1 character set, with accented (Portuguese) characters. In my php.ini I have ;;;;;;;;;;;;;;;;;;;; ; Unicode settings ; ;;;;;;;;;;;;;;;;;;;; unicode.semantics = on unicode.runtime_encoding = iso-8859-1 unicode.script_encoding = iso-8859-1 unicode.output_encoding = utf-8 unicode.from_error_mode = U_INVALID_SUBSTITUTE unicode.from_error_subst_char = 3f unicode.fallback_encoding = iso-8859-1 because all my files and data in mysql server are in iso-8859-1. When connecting to mysql I issue: mysql_query('set names latin1', $this->mysql_link); but when I do query in any record that have accented characters I get this warning (using mysql_fetch_assoc): ---------- Could not convert binary string to Unicode string (converter UTF-8 failed on bytes (0xE7) at offset 9) ---------- for all accented characters in all fields. If I changed the set names query to: mysql_query('set names utf8', $this->mysql_link); it works, but I would like to keep compatibility with PHP 5, and for my application it requires set names to be latin1. Also, my databases are not created with the "utf8" option. As I understood PHP 6's unicode support, all string characters (including mysql result values) are converted from unicode.runtime_encoding to unicode (utf-16), but looks like it is trying to convert from ASCII, which does not have all the accented characters. Am I assuming right? How to make mysql_fetch_assoc assume field values are in iso-8859-1 instead of ASCII? Thanks, Rangel Reale
-- Some people have a "gift" link here. Know what I want? I want you to buy a CD from some indie artist. http://cdbaby.com/browse/from/lynch Yeah, I get a buck. So? -- Internal Virus Database is out-of-date. Checked by AVG Free Edition. Version: 7.5.463 / Virus Database: 269.6.1/776 - Release Date: 25/4/2007 12:19


« previous php.general (#254302) next »