Показать сообщение отдельно
Старый 13.08.2009, 13:02
AVS_77 вне форума Посмотреть профиль Отправить личное сообщение для AVS_77 Найти все сообщения от AVS_77
  № 6  
Ответить с цитированием
AVS_77

Регистрация: Jun 2009
Сообщений: 4
В общем с подобной проблемой я тоже сталкнулся, кроме того в SELECT по русским символам типа SELECT с1 FROM t1 WHERE c1 = 'Пётр' тоже не работает , и решение обоих проблем как мне кажется возможно корявым методом транслитерации русских символов из приложения с внесением в БД уже латиницы.
В недавнем случае с которым пришлось заниматься самому, также столкнулся с проблемой отображения кирилических символов хранящихся в БД в UTF-8 или ANSI при использовании стандартных виндовых русских шрифтов типа Arial. Суть проблемы в интерпритации Цинком байтовых последовательностей полученных из БД методом
Код AS3:
str_db =  mdm.Database.SQLite.getField(0, 0);
при передаче в строковую переменную Flash. При хранении в БД в кодировке UTF-8 решил проблему так:
Код AS3:
 
t_task_text.text = f_decode_zinc_to_utf_8(str_db);
 
public function f_decode_zinc_to_utf_8(str_arg:String):String{
			//Функция перекодирует полученную и неверно интерпретированную Цинком из БД строку
			//в кодировку utf-8
 
			var i:Number;
			var n_str_len:Number;
			var n_char_code:Number;
			var ByteStr:ByteArray = new ByteArray();
			var str_return:String;
			//посчитать кол-во символов
			n_str_len = str_arg.length;
			if (n_str_len == 0){
				return '';
				}
			//порезать на символы
			//обрабатывать по символьно в байты
			for (i = 0; i < n_str_len; i++){
				n_char_code = str_arg.charCodeAt(i);
				trace(n_char_code);
				ByteStr.position = i;
				ByteStr.writeByte(n_char_code);
			}
 
			ByteStr.position = 0;
			str_return = ByteStr.readMultiByte(ByteStr.bytesAvailable,"utf-8");//"utf-8"  x-cp1251
			return str_return;
			}
из кода тоже видно что БД можо и и в ANSI хранить только в функции перекодировки использовать str_return = ByteStr.readMultiByte(ByteStr.bytesAvailable,"x-cp1251");