У меня есть программа, написанная на C # .net, которая загружает наши заказы на Amazon.com и сохраняет их в наших локальных базах данных.
Я столкнулся с проблемой, когда клиент, который приобрел продукт, ввел в адрес символ utf8 (℅) - (\ xe2 \ x84 \ x85). Это выглядит довольно разумно, но моя программа задохнулась, когда столкнулась с этим порядком, пока я не исправил следующее исправление.
//get the Address2 subnode
XmlNode Address2Node = singleOrder.SelectSingleNode("ShippingAddress/AddressLine2");
if (Address2Node != null)
{
GlobalClass.Address2 = Address2Node.InnerXml;
//** c/o Unicode character messed up program.
if (GlobalClass.Address2.Contains("℅"))
{
GlobalClass.Address2 = GlobalClass.Address2.Replace("℅", "c/o");
// Console.WriteLine(GlobalClass.Address2.Substring(0,1));
}
GlobalClass.Address2 = GlobalClass.Address2.Replace("'", "''");
}
else
{
GlobalClass.Address2 = "";
}
Очевидно, это будет работать только в этом одном поле и с этим одним символом utf8. Без этого исправления, когда я попытался использовать Mysql для его вставки, я получил сообщение об ошибке, которое в основном означало, что в моем операторе Mysql произошла ошибка, и к тому времени, когда он был отправлен в MySQL, он в основном говорил INSERT запись со строкой вроде '\ xE2 \ x84 \ x85 ... "плюс остальная часть строки.
Очевидно, что я не контролирую, что Amazon будет разрешать в полях адреса доставки, поэтому мне нужно учитывать любые странные символы, которые могут появиться, но я понятия не имею, как это сделать. Я надеялся, что просто использование utf8 в моей строке соединения (charset = utf8;) исправит это, но это ничего не сделало - все равно была та же ошибка. Возможно, мне не хватает моих навыков работы с Google, но я не могу найти способ разрешить появление каких-либо странных символов, которые могут появиться на моем пути, и я не хочу ждать, пока кто-нибудь напечатает его, чтобы исправить ошибку.
UPDATE:
Как насчет отправки "SET NAMES utf8" в качестве запроса? Это своего рода знание моего MySQL, и я не хочу ничего портить, но сработает ли это? И если да, то будут ли все программы, которые у меня есть, которые используют эту базу данных, отправлять этот же запрос?
ОБНОВЛЕНИЕ 2: Для тех, кто продолжает запрашивать сообщение об ошибке исключения, это:
«MySql.Data.MySqlClient.MySqlException» произошло в MySql.Data.dll
Дополнительная информация: Неверное строковое значение: '\ xE2 \ x84 \ x85 Yo ...' для столбца 'ShipAddressLine2' в строке 1
ОБНОВЛЕНИЕ 3: Из этого обсуждения: SET NAMES utf8 в MySQL? Я попытался отправить «SET NAMES 'cp1250'», и я был удивлен, увидев, что это позволило вставке пройти через символ ℅ там. Я понимаю, что, возможно, если до того, как я получу информацию, которую я посылаю "SET CHARSET 'utf8'" в качестве запроса перед другим запросом MySQL, чтобы получить его, возможно, я получу правильный символ? Я воодушевлен тем, что он прошел через мою программу, отправив запрос «SET NAMES 'cp1250'», но я хочу знать, какой набор кодировки использовать (CP1250 - восточноевропейский, и хотя у нас есть клиенты со всего мира, большинство наших клиенты находятся в Соединенных Штатах), и убедитесь, что это правильная практика, прежде чем я перейду на изменение всех своих программ, чтобы включить это. Кто-нибудь?