Если вы используете CentOS, вам нужно использовать
yum install python34-devel.x86_64
yum groupinstall -y 'development tools'
pip3 install mysql-connector
pip install mysqlclient
Это не может быть прекрасно (акцент, добавленный начиная с людей, пропускающих эту правовую оговорку), но что я сделал, в этом случае ниже. Можно корректироваться к использованию с потоком.
/// <summary>
/// Removes control characters and other non-UTF-8 characters
/// </summary>
/// <param name="inString">The string to process</param>
/// <returns>A string with no control characters or entities above 0x00FD</returns>
public static string RemoveTroublesomeCharacters(string inString)
{
if (inString == null) return null;
StringBuilder newString = new StringBuilder();
char ch;
for (int i = 0; i < inString.Length; i++)
{
ch = inString[i];
// remove any characters outside the valid UTF-8 range as well as all control characters
// except tabs and new lines
//if ((ch < 0x00FD && ch > 0x001F) || ch == '\t' || ch == '\n' || ch == '\r')
//if using .NET version prior to 4, use above logic
if (XmlConvert.IsXmlChar(ch)) //this method is new in .NET 4
{
newString.Append(ch);
}
}
return newString.ToString();
}
Мне нравится понятие белого списка Eugene. Я должен был сделать подобную вещь как исходный плакат, но я должен был поддерживать все символы Unicode, не только до 0x00FD. Спецификация XML:
Символ = #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
В.NET, внутреннее представление символов Unicode составляет только 16 битов, таким образом, мы не можем 'позволить' 0x10000-0x10FFFF явно. Спецификация XML явно запрещает суррогатные кодовые точки, начинающие в 0xD800 с появления. Однако возможно, что, если мы позволили эти суррогатные кодовые точки в нашем белом списке, utf-8 кодирование нашей строки, мог бы произвести допустимый XML в конце, пока надлежащее кодирование utf-8 было произведено из суррогатных пар utf-16 символов в строке.NET. Я не исследовал это, хотя, таким образом, я пошел с более безопасной ставкой и не позволил суррогаты в своем белом списке.
комментарии в решении Eugene вводят в заблуждение, хотя, проблема состоит в том, что символы, которые мы исключаем, не допустимы в XML... они - совершенно допустимые кодовые точки Unicode. Мы не удаляем 'non-utf-8 символы. Мы удаляем utf-8 символы, которые не могут появиться в правильно построенных XML-документах.
public static string XmlCharacterWhitelist( string in_string ) {
if( in_string == null ) return null;
StringBuilder sbOutput = new StringBuilder();
char ch;
for( int i = 0; i < in_string.Length; i++ ) {
ch = in_string[i];
if( ( ch >= 0x0020 && ch <= 0xD7FF ) ||
( ch >= 0xE000 && ch <= 0xFFFD ) ||
ch == 0x0009 ||
ch == 0x000A ||
ch == 0x000D ) {
sbOutput.Append( ch );
}
}
return sbOutput.ToString();
}
private static String removeNonUtf8CompliantCharacters( final String inString ) {
if (null == inString ) return null;
byte[] byteArr = inString.getBytes();
for ( int i=0; i < byteArr.length; i++ ) {
byte ch= byteArr[i];
// remove any characters outside the valid UTF-8 range as well as all control characters
// except tabs and new lines
if ( !( (ch > 31 && ch < 253 ) || ch == '\t' || ch == '\n' || ch == '\r') ) {
byteArr[i]=' ';
}
}
return new String( byteArr );
}
Попробуйте это для PHP!
$goodUTF8 = iconv("utf-8", "utf-8//IGNORE", $badUTF8);