|
- package rds
-
- import "strings"
-
- // normalizePS produces exactly 8 ASCII bytes for the RDS Program Service name.
- // Non-ASCII runes are replaced with space to avoid mid-rune truncation.
- func normalizePS(ps string) string {
- ps = strings.ToUpper(ps)
- clean := toASCII(ps)
- if len(clean) > 8 {
- clean = clean[:8]
- }
- if len(clean) < 8 {
- clean = clean + strings.Repeat(" ", 8-len(clean))
- }
- return clean
- }
-
- // normalizeRT produces up to 64 ASCII bytes for RDS RadioText.
- func normalizeRT(rt string) string {
- clean := toASCII(rt)
- if len(clean) > 64 {
- clean = clean[:64]
- }
- return clean
- }
-
- // toASCII replaces any non-ASCII byte with space.
- // RDS uses EBU Latin which is close to ASCII for the printable range.
- func toASCII(s string) string {
- b := []byte(s)
- for i, c := range b {
- if c < 0x20 || c > 0x7E {
- b[i] = ' '
- }
- }
- return string(b)
- }
|