An OCTET STRING may contain any sequence of octets, so there is no guarantee that they are printable characters.
Many other "types" are based on OCTET STRING, by adding restrictions. IpAddress, for example, is simply an OCTET STRING restricted to four bytes. This is defined in a Textual Convention definition in a MIB module. RFC1155-SMI contains the definition for IpAddress.
If you're trying to choose the type of a variable, such as when designing a MIB module, you should try to be as restrictive as possible, because this is more informative to the user of the MIB module.
Particularly, don't use OCTET STRING if you know the string should be printable. Instead choose SnmpAdminString (for almost all purposes) or DisplayString (if you are absolutely sure that the data will only contain ASCII characters, and no extended characters like accents & non-roman characters). Both are restricted to 255 octets, which is reasonable for most network management purposes. If you want to transfer larger amounts of data than this, maybe you are trying to do something that SNMP was not designed to facilitate.