截断字符串(到特定的字节大小)
Truncate a string (to a specific bytes size)
EventLog.WriteEntry 方法不接受超过 32766 / 31839 bytes...
的字符串
我想知道如何将字符串截断到特定的 字节数。
这是我的代码:
public static void Log(string message)
{
const int MaxLogMessageLenght = 32766;
string logMessage = message;
var unicodeByteCount =
System.Text.ASCIIEncoding.Unicode.GetByteCount(logMessage);
var asciiByteCount =
System.Text.ASCIIEncoding.ASCII.GetByteCount(logMessage);
if (unicodeByteCount >= MaxLogMessageLenght)
{
// ????
// Truncate the string to fit the WriteEntry length
// logMessage = message.Substring(0, MaxLogMessageLenght - 5) + "...";
}
EventLog.WriteEntry(LogSource, logMessage, EventLogEntryType.Information);
}
你可以试试这个。
const int MaxLogMessageLength = 31839 ;
int n = Encoding.Unicode.GetByteCount(message);
if (n > MaxLogMessageLength)
{
message = message.Substring(0, MaxLogMessageLength/2); // Most UTF16 chars are 2 bytes.
while (Encoding.Unicode.GetByteCount(message) > MaxLogMessageLength)
message = message.Substring(0, message.Length-1);
}
while
循环不太可能必须执行任何迭代,但某些语言除外。如果是这样,效率就不会很高。
对所需字符串长度的初步猜测是将最大长度除以二,因为大多数 UTF16 字符被编码为两个字节。有些可能需要两个以上的字节,在这种情况下,消息仍然太长,所以我们必须从末尾删除字符,直到足够短。
如果这是一个问题,您可以提高效率。
EventLog.WriteEntry 方法不接受超过 32766 / 31839 bytes...
的字符串我想知道如何将字符串截断到特定的 字节数。
这是我的代码:
public static void Log(string message)
{
const int MaxLogMessageLenght = 32766;
string logMessage = message;
var unicodeByteCount =
System.Text.ASCIIEncoding.Unicode.GetByteCount(logMessage);
var asciiByteCount =
System.Text.ASCIIEncoding.ASCII.GetByteCount(logMessage);
if (unicodeByteCount >= MaxLogMessageLenght)
{
// ????
// Truncate the string to fit the WriteEntry length
// logMessage = message.Substring(0, MaxLogMessageLenght - 5) + "...";
}
EventLog.WriteEntry(LogSource, logMessage, EventLogEntryType.Information);
}
你可以试试这个。
const int MaxLogMessageLength = 31839 ;
int n = Encoding.Unicode.GetByteCount(message);
if (n > MaxLogMessageLength)
{
message = message.Substring(0, MaxLogMessageLength/2); // Most UTF16 chars are 2 bytes.
while (Encoding.Unicode.GetByteCount(message) > MaxLogMessageLength)
message = message.Substring(0, message.Length-1);
}
while
循环不太可能必须执行任何迭代,但某些语言除外。如果是这样,效率就不会很高。
对所需字符串长度的初步猜测是将最大长度除以二,因为大多数 UTF16 字符被编码为两个字节。有些可能需要两个以上的字节,在这种情况下,消息仍然太长,所以我们必须从末尾删除字符,直到足够短。
如果这是一个问题,您可以提高效率。