Это будет работать в большинстве 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()
Я собрал следующий пример, чтобы помочь вам определить проблему, которая может возникнуть в вашем коде, и причину, по которой он не сохраняет строку Юникода в вашей таблице.
Этот пример сохранит текст 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();
}
Простой способ:
byte[] bytes = Encoding.Unicode.GetBytes(unicodeString);
Переключитесь от использования свойства Text RichTextBox к свойству Rtf. Это достигает результата, которого я добиваюсь ...
Спасибо всем
Ну, .NET - это юникод с самого начала, поэтому он должен быть простым.
Убедитесь, что параметры сортировки столбцов вашей базы данных также имеют юникод (такие как nvarchar
или просто сами параметры сортировки, поддерживающие символы Юникода).
Обычно это помогает, когда вы предоставляете пример кода, чтобы легче было найти проблему.