Чтение символов Юникода из текстового или расширенного текстового поля

Это будет работать в большинстве linux-боксов:

import socket, subprocess, re
def get_ipv4_address():
    """
    Returns IP address(es) of current machine.
    :return:
    """
    p = subprocess.Popen(["ifconfig"], stdout=subprocess.PIPE)
    ifc_resp = p.communicate()
    patt = re.compile(r'inet\s*\w*\S*:\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')
    resp = patt.findall(ifc_resp[0])
    print resp

get_ipv4_address()
0
задан Uwe Keim 21 February 2019 в 18:18
поделиться

4 ответа

Я собрал следующий пример, чтобы помочь вам определить проблему, которая может возникнуть в вашем коде, и причину, по которой он не сохраняет строку Юникода в вашей таблице.

Этот пример сохранит текст Unicode в таблицу dbo.MyTable, которая имеет следующую схему:

CREATE TABLE dbo.MyTable
(
    MyColumn NVARCHAR(MAX)
)

И эта логика будет вставлять запись в таблицу dbo.MyTable с текстом из [115 ]:

using (var cn = new SqlConnection("MyConnectionString"))
{
    cn.Open();

    using (var cm = cn.CreateCommand())
    {
        cm.CommandType = CommandType.Text;
        cm.CommandText = "INSERT dbo.MyTable (MyColumn) VALUES (@MyText)";

        // Assuming textBox1 is your textbox...
        cm.Parameters.Add(
            new SqlParameter("@MyText", SqlDbType.NVarChar, -1) { Value = textBox1.Text }
            );

        cm.ExecuteNonQuery();
    }
}

ОБНОВЛЕНИЕ

Исходя из вашего комментария ниже, я внес следующие изменения в ваш код вокруг SqlCommand, чтобы использовать параметры вместо конкатенации строк, я объяснил, почему это так плохо здесь ; Приведенный ниже код сохранит ваш Unicode-текст в вашей таблице, как и ожидалось, и будет в безопасности:

SqlCommand ins = new SqlCommand("UPDATE ProductTestSpecifications set Specification = @Specification where ProductID = @ProductID and TestID = @TestID", con);

// When building your SqlCommand, always use parameters if you are interacting with external input, this will protect you against SQL injection.
ins.Parameters.Add("@Specification", SqlDbType.NVarChar, -1).Value = myRichText.Text;

// Im assuming ProductID and TestID are System.Int32, if not, please change SqlDbType.Int to the appropriate type.
ins.Parameters.Add("@ProductID", SqlDbType.Int).Value = ProductID;
ins.Parameters.Add("@TestID", SqlDbType.Int).Value = TestID;

try
{
    ins.ExecuteNonQuery();
}
catch (Exception ex)
{
    result = ex.Message.ToString();
}
0
ответ дан yv989c 21 February 2019 в 18:18
поделиться

Простой способ:

byte[] bytes = Encoding.Unicode.GetBytes(unicodeString);
0
ответ дан Gauravsa 21 February 2019 в 18:18
поделиться

Переключитесь от использования свойства Text RichTextBox к свойству Rtf. Это достигает результата, которого я добиваюсь ...

Спасибо всем

0
ответ дан Dean Harry 21 February 2019 в 18:18
поделиться

Ну, .NET - это юникод с самого начала, поэтому он должен быть простым.

Убедитесь, что параметры сортировки столбцов вашей базы данных также имеют юникод (такие как nvarchar или просто сами параметры сортировки, поддерживающие символы Юникода).

Обычно это помогает, когда вы предоставляете пример кода, чтобы легче было найти проблему.

0
ответ дан aiodintsov 21 February 2019 в 18:18
поделиться