Trim/Truncate 字符串到最大字节数
Trim/Truncate string to a maximum number of bytes
我正在 ASP.NET 编码 VB 中处理一些 MP3,并且遇到了一些与 ID3 标签长度限制相关的问题。
似乎大多数标签都有 30 个字节的限制。
我知道如何获取字符串的字节长度,但希望能够 trim 一个字符串最多 30 个字节,减去 ...
的字节数,所以在需要的地方,我可以 trim 标题到 "this is part of a title..." ,总长度 <= 30 字节。
编辑:
澄清一下;
标题是字符串值,必须 <= 30 个字节。
使用 ServiceStack 我可以轻松地将我的字符串转换为字节数组:
Dim bytes as byte() = "This title".ToAsciiBytes()
然后我得到以字节为单位的长度:
Dim L as integer = bytes.length()
接下来我需要的是 仅获取前 30 个字节 并转换回字符串(就是 bytes.FromAsciiBytes()
)
Public Function FormatTitle(ByVal title As String) As String
Dim byte() As Byte = Encoding.ASCII.GetBytes(title)
If bytes.Length > 30 Then
Dim dot As Byte = 46 'ascii value of "."
bytes(27) = dot
bytes(28) = dot
bytes(29) = dot
Array.Resize(bytes, 30)
End If
Return Encoding.ASCII.GetString(bytes)
End Function
我正在 ASP.NET 编码 VB 中处理一些 MP3,并且遇到了一些与 ID3 标签长度限制相关的问题。
似乎大多数标签都有 30 个字节的限制。
我知道如何获取字符串的字节长度,但希望能够 trim 一个字符串最多 30 个字节,减去 ...
的字节数,所以在需要的地方,我可以 trim 标题到 "this is part of a title..." ,总长度 <= 30 字节。
编辑:
澄清一下;
标题是字符串值,必须 <= 30 个字节。
使用 ServiceStack 我可以轻松地将我的字符串转换为字节数组:
Dim bytes as byte() = "This title".ToAsciiBytes()
然后我得到以字节为单位的长度:
Dim L as integer = bytes.length()
接下来我需要的是 仅获取前 30 个字节 并转换回字符串(就是 bytes.FromAsciiBytes()
)
Public Function FormatTitle(ByVal title As String) As String
Dim byte() As Byte = Encoding.ASCII.GetBytes(title)
If bytes.Length > 30 Then
Dim dot As Byte = 46 'ascii value of "."
bytes(27) = dot
bytes(28) = dot
bytes(29) = dot
Array.Resize(bytes, 30)
End If
Return Encoding.ASCII.GetString(bytes)
End Function