我使用libconfig创建配置文件,其中一个字段是加密文件的内容。出现此问题是因为在文件中有一些转义字符导致部分存储内容。存储此数据以避免意外逃脱的最佳方法是什么?转换为unicode? 有什么建议吗?
答案 0 :(得分:2)
您可以使用网址编码,其中每个非ASCII字符编码为%
字符,后跟两个十六进制数字,或者您使用 base64编码,其中每组3个字节被编码为4个ASCII字符(3x8位 - > 4x6位)。
例如,如果您有以下字节:
00 01 41 31 80 FE
您可以按如下方式对其进行URL编码:
%00%01A1%80%FE
或者你可以像这样对它进行base64编码,0-25 = A-Z,26-51 = a-z,52-62 = 0-9,62 =。,63 = /:
(00000000 00000001 01000001) (00110001 10000000 11111110) -->
(000000 000000 000101 000001) (001100 011000 000011 111110)
AAJBNYD.
答案 1 :(得分:1)
用于编码文本中二进制数据的标准曾经是uuencode,现在是base64。两者都使用相同的范例:一个字节使用8位,所以3个字节使用24位或4个6位字符。
uuencode刚刚使用了偏移量为32的6位(ascii代码用于空格),因此字符在32-96 =>范围内。全部在可打印的ascii范围内,但包括空格和可能具有特殊含义的其他角色 base64选择这64个字符来表示0到63之间的值(没有=:;,'"\*(){}[]
可能有特殊意义......):
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
和等号(=
)是空位置的占位符和编码字符串的结尾,以确保编码的字符串长度是4的倍数。
不幸的是,C和C ++标准库都没有为uuencode提供基本64次转换的功能,但你可以找到很好的实现,在这个其他的答案中有很多指针:How do I base64 encode (decode) in C?